|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def process_nagad_item(nagad_item, nbrtuDict, nagad): |
|
|
if nagad_item in nbrtuDict: |
|
|
n = {nagad_item: nbrtuDict[nagad_item]} |
|
|
nagad.update(n) |
|
|
|
|
|
|
|
|
|
|
|
async def process_bkash_item(bkash_item, nbrtuDict, bkash): |
|
|
if bkash_item in nbrtuDict: |
|
|
b = {bkash_item: nbrtuDict[bkash_item]} |
|
|
bkash.update(b) |
|
|
|
|
|
|
|
|
|
|
|
async def process_rocket_item(rocket_item, nbrtuDict, rocket): |
|
|
if rocket_item in nbrtuDict: |
|
|
r = {rocket_item: nbrtuDict[rocket_item]} |
|
|
rocket.update(r) |
|
|
|
|
|
|
|
|
|
|
|
async def process_tap_item(tap_item, nbrtuDict, tap): |
|
|
if tap_item in nbrtuDict: |
|
|
t = {tap_item: nbrtuDict[tap_item]} |
|
|
tap.update(t) |
|
|
|
|
|
|
|
|
|
|
|
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(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) |
|
|
|
|
|
for nagad_remove_item in ndel_items: |
|
|
if nagad_remove_item in nbrtuDict: |
|
|
del nbrtuDict[nagad_remove_item] |
|
|
nagad = {} |
|
|
bkash = {} |
|
|
rocket = {} |
|
|
tap = {} |
|
|
upay = {} |
|
|
|
|
|
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 |