File size: 4,605 Bytes
16d8635
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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