nagad_version_12 / nagad_main_function.py
rakib72642's picture
updated marchent data
16d8635
import json
import pandas as pd
from PIL import Image
from aiohttp import ClientSession
from io import BytesIO
import asyncio
from Data.data import *
from Data.model import uddoktaModel, marchentModel
# Nagad Split Function
async def process_nagad_item(nagad_item, nbrtuDict, nagad):
if nagad_item in nbrtuDict:
n = {nagad_item: nbrtuDict[nagad_item]}
nagad.update(n)
# Bkash Split Function
async def process_bkash_item(bkash_item, nbrtuDict, bkash):
if bkash_item in nbrtuDict:
b = {bkash_item: nbrtuDict[bkash_item]}
bkash.update(b)
# Rocket Split Function
async def process_rocket_item(rocket_item, nbrtuDict, rocket):
if rocket_item in nbrtuDict:
r = {rocket_item: nbrtuDict[rocket_item]}
rocket.update(r)
# Tap Split Function
async def process_tap_item(tap_item, nbrtuDict, tap):
if tap_item in nbrtuDict:
t = {tap_item: nbrtuDict[tap_item]}
tap.update(t)
# Upay Split Function
async def process_upay_item(upay_item, nbrtuDict, upay):
if upay_item in nbrtuDict:
u = {upay_item: nbrtuDict[upay_item]}
upay.update(u)
async def getImage(img_url, session):
async with session.get(img_url) as response:
img_data = await response.read()
return BytesIO(img_data)
async def detection(model,img_content,confidence):
img = Image.open(img_content)
# result = model(img)
result = model(source=img,device=0,conf=confidence)
detection = {}
data = json.loads(result[0].tojson())
if len(data) == 0:
res = {"AI": "No Detection"}
detection.update(res)
else:
df = pd.DataFrame(data)
name_counts = df['name'].value_counts().sort_index()
for name, count in name_counts.items():
res = {name: count}
detection.update(res)
return detection
async def combineAllResult(uddoktaData,marchentData):
all_result = {}
all_result.update(uddoktaData)
all_result.update(marchentData)
return all_result
async def prepareUddokta(uddoktaData):
all_uddokta = {}
for sku in uddoktaSKU:
if sku in uddoktaData:
all_uddokta.update({sku:uddoktaData[sku]})
return all_uddokta
async def prepareMarchent(marchentData):
all_marchent = {}
for sku in marchentSKU:
if sku in marchentData:
all_marchent.update({sku:marchentData[sku]})
return all_marchent
async def prepareResult(uddoktaData,marchentData):
uddokta = await prepareUddokta(uddoktaData)
marchent = await prepareMarchent(marchentData)
allResult = await combineAllResult(uddokta,marchent)
return allResult
async def mainDet(url):
async with ClientSession() as session:
image = await asyncio.create_task(getImage(url, session))
Tasks = [
asyncio.create_task(detection(uddoktaModel, image,0.7)),
asyncio.create_task(detection(marchentModel, image,0.8))
]
uddokta,marchent = await asyncio.gather(*Tasks)
nbrtuDict = await prepareResult(uddokta,marchent)
for val_item in NBRTU_val:
if val_item in nbrtuDict:
nbrtu_validation_single = {val_item: "yes"}
nbrtuDict.update(nbrtu_validation_single)
# Remove Extra Items :
for nagad_remove_item in ndel_items:
if nagad_remove_item in nbrtuDict:
del nbrtuDict[nagad_remove_item]
nagad = {}
bkash = {}
rocket = {}
tap = {}
upay = {}
# Using asyncio.gather to await multiple process functions concurrently
process_nagad_tasks = [process_nagad_item(nagad_item, nbrtuDict, nagad) for nagad_item in nagad_items]
process_bkash_tasks = [process_bkash_item(bkash_item, nbrtuDict, bkash) for bkash_item in bkash_items]
process_rocket_tasks = [process_rocket_item(rocket_item, nbrtuDict, rocket) for rocket_item in rocket_items]
process_tap_tasks = [process_tap_item(tap_item, nbrtuDict, tap) for tap_item in tap_items]
process_upay_tasks = [process_upay_item(upay_item, nbrtuDict, upay) for upay_item in upay_items]
await asyncio.gather(*process_nagad_tasks, *process_bkash_tasks, *process_rocket_tasks, *process_tap_tasks, *process_upay_tasks)
nagad_detection = {
'nagad': nagad,
'bkash': bkash,
'rocket': rocket,
'tap': tap,
'upay': upay
}
nagad_result = json.dumps(nagad_detection)
return nagad_result