From d35a5955af87a0bfb96bf2d5683fffd3e654b3e2 Mon Sep 17 00:00:00 2001 From: PhanThanhTrung Date: Wed, 13 Mar 2024 13:18:57 +0700 Subject: [PATCH] update accuracy fns for adding invoice_no --- cope2n-api/fwd_api/utils/accuracy.py | 220 ++++++++------------------- 1 file changed, 61 insertions(+), 159 deletions(-) diff --git a/cope2n-api/fwd_api/utils/accuracy.py b/cope2n-api/fwd_api/utils/accuracy.py index ee258c0..fa671ab 100755 --- a/cope2n-api/fwd_api/utils/accuracy.py +++ b/cope2n-api/fwd_api/utils/accuracy.py @@ -17,7 +17,7 @@ from fwd import settings from ..models import SubscriptionRequest, Report, ReportFile import json -valid_keys = ["retailername", "sold_to_party", "purchase_date", "imei_number"] +valid_keys = ["retailername", "sold_to_party", "invoice_no", "purchase_date", "imei_number"] class ReportAccumulateByRequest: def __init__(self, sub): @@ -41,7 +41,8 @@ class ReportAccumulateByRequest: 'imei': IterAvg(), 'purchase_date': IterAvg(), 'retailer_name': IterAvg(), - 'sold_to_party': IterAvg() + 'sold_to_party': IterAvg(), + 'invoice_no': IterAvg() }, 'average_processing_time': { 'imei': IterAvg(), @@ -57,13 +58,15 @@ class ReportAccumulateByRequest: 'imei_number': IterAvg(), 'purchase_date': IterAvg(), 'retailername': IterAvg(), - 'sold_to_party': IterAvg() + 'sold_to_party': IterAvg(), + 'invoice_no': IterAvg() }, 'reviewed_accuracy': { 'imei_number': IterAvg(), 'purchase_date': IterAvg(), 'retailername': IterAvg(), - 'sold_to_party': IterAvg() + 'sold_to_party': IterAvg(), + 'invoice_no': IterAvg() }, 'num_request': 0, "review_progress": [] @@ -84,7 +87,8 @@ class ReportAccumulateByRequest: 'imei': IterAvg(), 'purchase_date': IterAvg(), 'retailer_name': IterAvg(), - 'sold_to_party': IterAvg() + 'sold_to_party': IterAvg(), + 'invoice_no': IterAvg() }, 'average_processing_time': { 'imei': IterAvg(), @@ -100,13 +104,15 @@ class ReportAccumulateByRequest: 'imei_number': IterAvg(), 'purchase_date': IterAvg(), 'retailername': IterAvg(), - 'sold_to_party': IterAvg() + 'sold_to_party': IterAvg(), + 'invoice_no': IterAvg() }, 'reviewed_accuracy': { 'imei_number': IterAvg(), 'purchase_date': IterAvg(), 'retailername': IterAvg(), - 'sold_to_party': IterAvg() + 'sold_to_party': IterAvg(), + 'invoice_no': IterAvg() }, "report_files": [], "num_request": 0, @@ -132,15 +138,17 @@ class ReportAccumulateByRequest: total["average_accuracy_rate"]["purchase_date"].add(report_file.reviewed_accuracy.get("purchase_date", [])) total["average_accuracy_rate"]["retailer_name"].add(report_file.reviewed_accuracy.get("retailername", [])) total["average_accuracy_rate"]["sold_to_party"].add(report_file.reviewed_accuracy.get("sold_to_party", [])) + total["average_accuracy_rate"]["invoice_no"].add(report_file.reviewed_accuracy.get("invoice_no", [])) elif sum([len(report_file.feedback_accuracy[x]) for x in report_file.feedback_accuracy.keys() if "_count" not in x]) > 0: total["average_accuracy_rate"]["imei"].add(report_file.feedback_accuracy.get("imei_number", [])) total["average_accuracy_rate"]["purchase_date"].add(report_file.feedback_accuracy.get("purchase_date", [])) total["average_accuracy_rate"]["retailer_name"].add(report_file.feedback_accuracy.get("retailername", [])) total["average_accuracy_rate"]["sold_to_party"].add(report_file.feedback_accuracy.get("sold_to_party", [])) + total["average_accuracy_rate"]["invoice_no"].add(report_file.feedback_accuracy.get("invoice_no", [])) - for key in ["imei_number", "purchase_date", "retailername", "sold_to_party"]: + for key in ["imei_number", "purchase_date", "invoice_no", "retailername", "sold_to_party"]: total["feedback_accuracy"][key].add(report_file.feedback_accuracy.get(key, [])) - for key in ["imei_number", "purchase_date", "retailername", "sold_to_party"]: + for key in ["imei_number", "purchase_date", "invoice_no", "retailername", "sold_to_party"]: total["reviewed_accuracy"][key].add(report_file.reviewed_accuracy.get(key, [])) if not total["average_processing_time"].get(report_file.doc_type, None): @@ -179,15 +187,17 @@ class ReportAccumulateByRequest: day_data["average_accuracy_rate"]["purchase_date"].add(report_file.reviewed_accuracy.get("purchase_date", [])) day_data["average_accuracy_rate"]["retailer_name"].add(report_file.reviewed_accuracy.get("retailername", [])) day_data["average_accuracy_rate"]["sold_to_party"].add(report_file.reviewed_accuracy.get("sold_to_party", [])) + day_data["average_accuracy_rate"]["invoice_no"].add(report_file.reviewed_accuracy.get("invoice_no", [])) elif sum([len(report_file.feedback_accuracy[x]) for x in report_file.feedback_accuracy.keys() if "_count" not in x]) > 0: day_data["average_accuracy_rate"]["imei"].add(report_file.feedback_accuracy.get("imei_number", [])) day_data["average_accuracy_rate"]["purchase_date"].add(report_file.feedback_accuracy.get("purchase_date", [])) day_data["average_accuracy_rate"]["retailer_name"].add(report_file.feedback_accuracy.get("retailername", [])) day_data["average_accuracy_rate"]["sold_to_party"].add(report_file.feedback_accuracy.get("sold_to_party", [])) + day_data["average_accuracy_rate"]["invoice_no"].add(report_file.feedback_accuracy.get("invoice_no", [])) - for key in ["imei_number", "purchase_date", "retailername", "sold_to_party"]: + for key in ["imei_number", "purchase_date", "invoice_no", "retailername", "sold_to_party"]: day_data["feedback_accuracy"][key].add(report_file.feedback_accuracy.get(key, [])) - for key in ["imei_number", "purchase_date", "retailername", "sold_to_party"]: + for key in ["imei_number", "purchase_date", "invoice_no", "retailername", "sold_to_party"]: day_data["reviewed_accuracy"][key].add(report_file.reviewed_accuracy.get(key, [])) if not day_data["average_processing_time"].get(report_file.doc_type, None): @@ -264,7 +274,7 @@ class ReportAccumulateByRequest: "reviewed_accuracy": {}} for acc_type in ["feedback_accuracy", "reviewed_accuracy"]: avg_acc = IterAvg() - for key in ["imei_number", "purchase_date", "retailername", "sold_to_party"]: + for key in ["imei_number", "purchase_date", "invoice_no", "retailername", "sold_to_party"]: acumulated_acc[acc_type][key] = self.data[month][1][day][acc_type][key]() acumulated_acc[acc_type][key+"_count"] = self.data[month][1][day][acc_type][key].count avg_acc.add_avg(acumulated_acc[acc_type][key], acumulated_acc[acc_type][key+"_count"]) @@ -312,6 +322,7 @@ class ReportAccumulateByRequest: _data[month][1][day]["average_accuracy_rate"]["purchase_date"] = _data[month][1][day]["average_accuracy_rate"]["purchase_date"]() _data[month][1][day]["average_accuracy_rate"]["retailer_name"] = _data[month][1][day]["average_accuracy_rate"]["retailer_name"]() _data[month][1][day]["average_accuracy_rate"]["sold_to_party"] = _data[month][1][day]["average_accuracy_rate"]["sold_to_party"]() + _data[month][1][day]["average_accuracy_rate"]["invoice_no"] = _data[month][1][day]["average_accuracy_rate"]["invoice_no"]() for key in _data[month][1][day]["average_processing_time"].keys(): _data[month][1][day]["average_processing_time"][key] = _data[month][1][day]["average_processing_time"][key]() @@ -319,10 +330,14 @@ class ReportAccumulateByRequest: _data[month][1][day]["feedback_accuracy"]["purchase_date"] = _data[month][1][day]["feedback_accuracy"]["purchase_date"]() _data[month][1][day]["feedback_accuracy"]["retailername"] = _data[month][1][day]["feedback_accuracy"]["retailername"]() _data[month][1][day]["feedback_accuracy"]["sold_to_party"] = _data[month][1][day]["feedback_accuracy"]["sold_to_party"]() + _data[month][1][day]["feedback_accuracy"]["invoice_no"] = _data[month][1][day]["feedback_accuracy"]["invoice_no"]() + _data[month][1][day]["reviewed_accuracy"]["imei_number"] = _data[month][1][day]["reviewed_accuracy"]["imei_number"]() _data[month][1][day]["reviewed_accuracy"]["purchase_date"] = _data[month][1][day]["reviewed_accuracy"]["purchase_date"]() _data[month][1][day]["reviewed_accuracy"]["retailername"] = _data[month][1][day]["reviewed_accuracy"]["retailername"]() _data[month][1][day]["reviewed_accuracy"]["sold_to_party"] = _data[month][1][day]["reviewed_accuracy"]["sold_to_party"]() + _data[month][1][day]["reviewed_accuracy"]["invoice_no"] = _data[month][1][day]["reviewed_accuracy"]["invoice_no"]() + _data[month][1][day]["review_progress"] = _data[month][1][day]["review_progress"].count(1)/(_data[month][1][day]["review_progress"].count(0)+ _data[month][1][day]["review_progress"].count(1)) if (_data[month][1][day]["review_progress"].count(0)+ _data[month][1][day]["review_progress"].count(1)) >0 else 0 _data[month][1][day].pop("report_files") @@ -336,6 +351,7 @@ class ReportAccumulateByRequest: _data[month][0]["average_accuracy_rate"]["purchase_date"] = _data[month][0]["average_accuracy_rate"]["purchase_date"]() _data[month][0]["average_accuracy_rate"]["retailer_name"] = _data[month][0]["average_accuracy_rate"]["retailer_name"]() _data[month][0]["average_accuracy_rate"]["sold_to_party"] = _data[month][0]["average_accuracy_rate"]["sold_to_party"]() + _data[month][0]["average_accuracy_rate"]["invoice_no"] = _data[month][0]["average_accuracy_rate"]["invoice_no"]() for key in _data[month][0]["average_processing_time"].keys(): _data[month][0]["average_processing_time"][key] = _data[month][0]["average_processing_time"][key]() @@ -343,10 +359,14 @@ class ReportAccumulateByRequest: _data[month][0]["feedback_accuracy"]["purchase_date"] = _data[month][0]["feedback_accuracy"]["purchase_date"]() _data[month][0]["feedback_accuracy"]["retailername"] = _data[month][0]["feedback_accuracy"]["retailername"]() _data[month][0]["feedback_accuracy"]["sold_to_party"] = _data[month][0]["feedback_accuracy"]["sold_to_party"]() + _data[month][0]["feedback_accuracy"]["invoice_no"] = _data[month][0]["feedback_accuracy"]["invoice_no"]() + _data[month][0]["reviewed_accuracy"]["imei_number"] = _data[month][0]["reviewed_accuracy"]["imei_number"]() _data[month][0]["reviewed_accuracy"]["purchase_date"] = _data[month][0]["reviewed_accuracy"]["purchase_date"]() _data[month][0]["reviewed_accuracy"]["retailername"] = _data[month][0]["reviewed_accuracy"]["retailername"]() _data[month][0]["reviewed_accuracy"]["sold_to_party"] = _data[month][0]["reviewed_accuracy"]["sold_to_party"]() + _data[month][0]["reviewed_accuracy"]["invoice_no"] = _data[month][0]["reviewed_accuracy"]["invoice_no"]() + _data[month][0]["review_progress"] = _data[month][0]["review_progress"].count(1)/(_data[month][0]["review_progress"].count(0)+ _data[month][0]["review_progress"].count(1)) if (_data[month][0]["review_progress"].count(0)+ _data[month][0]["review_progress"].count(1)) >0 else 0 return _data @@ -367,7 +387,8 @@ class MonthReportAccumulate: 'average_accuracy_rate': { 'imei': IterAvg(), 'purchase_date': IterAvg(), - 'retailer_name': IterAvg() + 'retailer_name': IterAvg(), + 'invoice_no': IterAvg() }, 'average_processing_time': { 'imei': IterAvg(), @@ -394,7 +415,8 @@ class MonthReportAccumulate: 'average_accuracy_rate': { 'imei': 0, 'purchase_date': 0, - 'retailer_name': 0 + 'retailer_name': 0, + 'invoice_no': 0 }, 'average_processing_time': { 'imei': 0, @@ -416,10 +438,12 @@ class MonthReportAccumulate: self.total["average_accuracy_rate"]["imei"].add_avg(report.reviewed_accuracy.get("imei_number", 0), report.reviewed_accuracy.get("imei_number_count", 0)) self.total["average_accuracy_rate"]["purchase_date"].add_avg(report.reviewed_accuracy.get("purchase_date", 0), report.reviewed_accuracy.get("purchase_date_count", 0)) self.total["average_accuracy_rate"]["retailer_name"].add_avg(report.reviewed_accuracy.get("retailername", 0), report.reviewed_accuracy.get("retailername_count", 0)) + self.total["average_accuracy_rate"]["invoice_no"].add_avg(report.reviewed_accuracy.get("invoice_no", 0), report.reviewed_accuracy.get("invoice_no_count", 0)) elif sum([ report.feedback_accuracy[x] for x in report.feedback_accuracy.keys() if "_count" not in x]) > 0: self.total["average_accuracy_rate"]["imei"].add_avg(report.feedback_accuracy.get("imei_number", 0), report.feedback_accuracy.get("imei_number_count", 0)) self.total["average_accuracy_rate"]["purchase_date"].add_avg(report.feedback_accuracy.get("purchase_date", 0), report.feedback_accuracy.get("purchase_date_count", 0)) self.total["average_accuracy_rate"]["retailer_name"].add_avg(report.feedback_accuracy.get("retailername", 0), report.feedback_accuracy.get("retailername_count", 0)) + self.total["average_accuracy_rate"]["invoice_no"].add_avg(report.feedback_accuracy.get("invoice_no", 0), report.feedback_accuracy.get("invoice_no_count", 0)) self.total["average_processing_time"]["imei"].add_avg(report.average_OCR_time.get("imei", 0), report.average_OCR_time.get("imei_count", 0)) if report.average_OCR_time else 0 self.total["average_processing_time"]["invoice"].add_avg(report.average_OCR_time.get("invoice", 0), report.average_OCR_time.get("invoice_count", 0)) if report.average_OCR_time else 0 @@ -453,10 +477,13 @@ class MonthReportAccumulate: new_data["average_accuracy_rate"]["imei"] = report.reviewed_accuracy.get("imei_number", None) new_data["average_accuracy_rate"]["purchase_date"] = report.reviewed_accuracy.get("purchase_date", None) new_data["average_accuracy_rate"]["retailer_name"] = report.reviewed_accuracy.get("retailername", None) + new_data["average_accuracy_rate"]["invoice_no"] = report.reviewed_accuracy.get("invoice_no", None) elif sum([ report.feedback_accuracy[x] for x in report.feedback_accuracy.keys() if "_count" not in x]): new_data["average_accuracy_rate"]["imei"] = report.feedback_accuracy.get("imei_number", None) new_data["average_accuracy_rate"]["purchase_date"] = report.feedback_accuracy.get("purchase_date", None) new_data["average_accuracy_rate"]["retailer_name"] = report.feedback_accuracy.get("retailername", None) + new_data["average_accuracy_rate"]["invoice_no"] = report.feedback_accuracy.get("invoice_no", None) + new_data["average_processing_time"]["imei"] = report.average_OCR_time.get("imei", 0) if report.average_OCR_time else 0 new_data["average_processing_time"]["invoice"] = report.average_OCR_time.get("invoice", 0) if report.average_OCR_time else 0 new_data["usage"]["imei"] = report.number_imei_transaction @@ -544,7 +571,7 @@ def validate_feedback_file(feedback, predict): if num_imei_feedback != num_imei_predict: return False return True - + def first_of_list(the_list): if not the_list: return None @@ -567,6 +594,9 @@ def extract_report_detail_list(report_detail_list, lower=False, in_percent=True) "Invoice_Retailer_Consumer": report_file.feedback_result.get("retailername", None), "Invoice_Retailer_OCR": report_file.predict_result.get("retailername", None), "Invoice_Retailer Accuracy": first_of_list(report_file.feedback_accuracy.get("retailername", [None])), + "Invoice_No_Consumer": report_file.feedback_result.get("invoice_no", None), + "Invoice_No_OCR": report_file.predict_result.get("invoice_no", None), + "Invoice_No Accuracy": first_of_list(report_file.feedback_accuracy.get("invoice_no", [None])), "OCR Image Accuracy": report_file.acc, "OCR Image Speed (seconds)": report_file.time_cost, "Is Reviewed": report_file.is_reviewed, @@ -575,6 +605,7 @@ def extract_report_detail_list(report_detail_list, lower=False, in_percent=True) "IMEI_Revised Accuracy": first_of_list(report_file.reviewed_accuracy.get("imei_number", [None])), "Purchase Date_Revised Accuracy": first_of_list(report_file.reviewed_accuracy.get("purchase_date", [None])), "Retailer_Revised Accuracy": first_of_list(report_file.reviewed_accuracy.get("retailername", [None])), + "Invoice_No_Revised Accuracy": first_of_list(report_file.reviewed_accuracy.get("invoice_no", [None])) }) if lower: for i, dat in enumerate(data): @@ -630,14 +661,16 @@ def convert_datetime_format(date_string: str, is_gt=False) -> str: def predict_result_to_ready(result): dict_result = {"retailername": "", "sold_to_party": "", + "invoice_no": "", "purchase_date": [], "imei_number": [],} if not result: return dict_result dict_result["retailername"] = result.get("content", {}).get("document", [{}])[0].get("content", [{}])[0].get("value", None) dict_result["sold_to_party"] = result.get("content", {}).get("document", [{}])[0].get("content", [{}, {}])[1].get("value", None) - dict_result["purchase_date"] = result.get("content", {}).get("document", [{}])[0].get("content", [{}, {}, {}])[2].get("value", []) - dict_result["imei_number"] = result.get("content", {}).get("document", [{}])[0].get("content", [{}, {}, {}, {}])[3].get("value", []) + dict_result["invoice_no"] = result.get("content", {}).get("document", [{}])[0].get("content", [{}, {}])[2].get("value", None) + dict_result["purchase_date"] = result.get("content", {}).get("document", [{}])[0].get("content", [{}, {}, {}])[3].get("value", []) + dict_result["imei_number"] = result.get("content", {}).get("document", [{}])[0].get("content", [{}, {}, {}, {}])[4].get("value", []) return dict_result def align_fine_result(ready_predict, fine_result): @@ -648,8 +681,8 @@ def align_fine_result(ready_predict, fine_result): ready_predict["purchase_date"] = [None] if fine_result["retailername"] and not ready_predict["retailername"]: ready_predict["retailername"] = [None] - # if ready_predict["retailername"] and not fine_result["retailername"]: - # fine_result["retailername"] = [None] + if ready_predict["invoice_no"] and not fine_result["invoice_no"]: + fine_result["invoice_no"] = [None] fine_result["purchase_date"] = [fine_result["purchase_date"] for _ in range(len(ready_predict["purchase_date"]))] # fine_result["retailername"] = None if len(ready_predict["purchase_date"]))] # else: @@ -724,76 +757,6 @@ def calculate_avg_accuracy(acc, type, keys=[]): return sum(acc_list)/len(acc_list) if len(acc_list) > 0 else None -# Deprecated -def calculate_and_save_subcription_file(report, request): - request_att = {"acc": {"feedback": {"imei_number": [], - "purchase_date": [], - "retailername": [], - "sold_to_party": [], - }, - "reviewed": {"imei_number": [], - "purchase_date": [], - "retailername": [], - "sold_to_party": [], - }}, - "err": [], - "time_cost": {}, - "total_images": 0, - "bad_images": 0} - images = SubscriptionRequestFile.objects.filter(request=request) - for image in images: - status, att = calculate_subcription_file(image) - if status != 200: - continue - image.feedback_accuracy = att["acc"]["feedback"] - image.reviewed_accuracy = att["acc"]["reviewed"] - image.is_bad_image_quality = att["is_bad_image"] - image.save() - new_report_file = ReportFile(report=report, - correspond_request_id=request.request_id, - correspond_redemption_id=request.redemption_id, - doc_type=image.doc_type, - predict_result=image.predict_result, - feedback_result=image.feedback_result, - reviewed_result=image.reviewed_result, - feedback_accuracy=att["acc"]["feedback"], - reviewed_accuracy=att["acc"]["reviewed"], - acc=att["avg_acc"], - time_cost=image.processing_time, - is_bad_image=att["is_bad_image"], - bad_image_reason=image.reason, - counter_measures=image.counter_measures, - error="|".join(att["err"]) - ) - new_report_file.save() - if request_att["time_cost"].get(image.doc_type, None): - request_att["time_cost"][image.doc_type].append(image.processing_time) - else: - request_att["time_cost"][image.doc_type] = [image.processing_time] - try: - request_att["acc"]["feedback"]["imei_number"] += att["acc"]["feedback"]["imei_number"] - request_att["acc"]["feedback"]["purchase_date"] += att["acc"]["feedback"]["purchase_date"] - request_att["acc"]["feedback"]["retailername"] += att["acc"]["feedback"]["retailername"] - request_att["acc"]["feedback"]["sold_to_party"] += att["acc"]["feedback"]["sold_to_party"] - - request_att["acc"]["reviewed"]["imei_number"] += att["acc"]["reviewed"]["imei_number"] - request_att["acc"]["reviewed"]["purchase_date"] += att["acc"]["reviewed"]["purchase_date"] - request_att["acc"]["reviewed"]["retailername"] += att["acc"]["reviewed"]["retailername"] - request_att["acc"]["reviewed"]["sold_to_party"] += att["acc"]["reviewed"]["sold_to_party"] - - request_att["bad_images"] += int(att["is_bad_image"]) - request_att["total_images"] += 1 - request_att["err"] += att["err"] - except Exception as e: - print(e) - continue - - return request_att - -# def result_maximize_list_values(result, acc): -# for k in acc.keys(): -# if isinstance(acc[k], list) and len(acc[k]) > 0: - def acc_maximize_list_values(acc): pos = {} for k in acc.keys(): @@ -852,16 +815,19 @@ def calculate_a_request(report, request): "purchase_date": [], "retailername": [], "sold_to_party": [], + "invoice_no": [], }, "reviewed": {"imei_number": [], "purchase_date": [], "retailername": [], "sold_to_party": [], + "invoice_no": [], }, "acumulated":{"imei_number": [], "purchase_date": [], "retailername": [], "sold_to_party": [], + "invoice_no": [], }}, "err": [], "time_cost": {"imei": [], @@ -950,16 +916,19 @@ def calculate_a_request(report, request): request_att["acc"]["feedback"]["purchase_date"] += _att["acc"]["feedback"]["purchase_date"] request_att["acc"]["feedback"]["retailername"] += _att["acc"]["feedback"]["retailername"] request_att["acc"]["feedback"]["sold_to_party"] += _att["acc"]["feedback"]["sold_to_party"] + request_att["acc"]["feedback"]["invoice_no"] += _att["acc"]["feedback"]["invoice_no"] request_att["acc"]["reviewed"]["imei_number"] += _att["acc"]["reviewed"]["imei_number"] request_att["acc"]["reviewed"]["purchase_date"] += _att["acc"]["reviewed"]["purchase_date"] request_att["acc"]["reviewed"]["retailername"] += _att["acc"]["reviewed"]["retailername"] request_att["acc"]["reviewed"]["sold_to_party"] += _att["acc"]["reviewed"]["sold_to_party"] + request_att["acc"]["reviewed"]["invoice_no"] += _att["acc"]["reviewed"]["invoice_no"] request_att["acc"]["acumulated"]["imei_number"] += _att["acc"]["reviewed"]["imei_number"] if _att["acc"]["reviewed"]["imei_number"] else _att["acc"]["feedback"]["imei_number"] request_att["acc"]["acumulated"]["purchase_date"] += _att["acc"]["reviewed"]["purchase_date"] if _att["acc"]["reviewed"]["purchase_date"] else _att["acc"]["feedback"]["purchase_date"] request_att["acc"]["acumulated"]["retailername"] += _att["acc"]["reviewed"]["retailername"] if _att["acc"]["reviewed"]["retailername"] else _att["acc"]["feedback"]["retailername"] request_att["acc"]["acumulated"]["sold_to_party"] += _att["acc"]["reviewed"]["sold_to_party"] if _att["acc"]["reviewed"]["sold_to_party"] else _att["acc"]["feedback"]["sold_to_party"] + request_att["acc"]["acumulated"]["invoice_no"] += _att["acc"]["reviewed"]["invoice_no"] if _att["acc"]["reviewed"]["invoice_no"] else _att["acc"]["feedback"]["invoice_no"] if image.reason not in settings.ACC_EXCLUDE_RESEASONS: request_att["bad_images"] += int(_att["is_bad_image"]) @@ -987,10 +956,6 @@ def calculate_subcription_file(subcription_request_file): inference_result = copy.deepcopy(subcription_request_file.predict_result) inference_result, feedback_result = align_fine_result(inference_result, copy.deepcopy(subcription_request_file.feedback_result)) inference_result, reviewed_result = align_fine_result(inference_result, copy.deepcopy(subcription_request_file.reviewed_result)) - # print(f"[DEBUG]: predict_result: {subcription_request_file.predict_result}") - # print(f"[DEBUG]: inference_result: {inference_result}") - # print(f"[DEBUG]: feedback_result: {feedback_result}") - # print(f"[DEBUG]: reviewed_result: {reviewed_result}") for key_name in valid_keys: try: @@ -1002,8 +967,8 @@ def calculate_subcription_file(subcription_request_file): # print(f"[DEBUG]: e: {e} -key_name: {key_name}") subcription_request_file.feedback_accuracy = att["acc"]["feedback"] subcription_request_file.reviewed_accuracy = att["acc"]["reviewed"] - avg_reviewed = calculate_avg_accuracy(att["acc"], "reviewed", ["retailername", "sold_to_party", "purchase_date", "imei_number"]) - avg_feedback = calculate_avg_accuracy(att["acc"], "feedback", ["retailername", "sold_to_party", "purchase_date", "imei_number"]) + avg_reviewed = calculate_avg_accuracy(att["acc"], "reviewed", ["retailername", "sold_to_party", "invoice_no", "purchase_date", "imei_number"]) + avg_feedback = calculate_avg_accuracy(att["acc"], "feedback", ["retailername", "sold_to_party", "invoice_no", "purchase_date", "imei_number"]) if avg_feedback is not None or avg_reviewed is not None: avg_acc = 0 if avg_feedback is not None: @@ -1019,68 +984,6 @@ def calculate_subcription_file(subcription_request_file): att["is_bad_image"] = True return 200, att -def calculate_attributions(request): # for one request, return in order - # Deprecated - acc = {"feedback": {}, - "reviewed": {}} # {"feedback": {"retailername": [0.1], "sold_to_party":[0.9], "purchase_date":[0.6], "imei_number":[0.8]}, - # "reviewed": {"retailername": [0.1], "sold_to_party":[0.9], "purchase_date":[0.6], "imei_number":[0.8]}} - data = {"feedback": {}, - "reviewed": {}} # {"feedback": {"retailername": [[ocr, feedback], ...], "sold_to_party":[[ocr, feedback], ...], "purchase_date":[[ocr, feedback], ...], "imei_number":[[ocr, feedback], ...]}} - # {"reviewed": {"retailername": [[ocr, reviewed], ...], "sold_to_party":[[ocr, reviewed], ...], "purchase_date":[[ocr, reviewed], ...], "imei_number":[[ocr, reviewed], ...]}} - time_cost = {} # {"imei": [0.1], "invoice": [0.1]} - image_quality_num = [0, 0] # [good, bad] - image_quality_num[0] = len(request.doc_type.split(",")) - error = "" - - inference_result = predict_result_to_ready(request.predict_result) - reviewed_result = align_fine_result(inference_result, request.reviewed_result) - feedback_result = align_fine_result(inference_result, request.feedback_result) - - # accuracy calculation - for key_name in valid_keys: - if isinstance(inference_result[key_name], list): - if len(inference_result[key_name]) != len(reviewed_result.get(key_name, [])): - error = f"Request {request.request_id} failed with different {key_name} in predict and reviewed_result" - break - if len(inference_result[key_name]) != len(feedback_result.get(key_name, [])): - error = f"Request {request.request_id} failed with different {key_name} in predict and feedback_result" - break - # calculate accuracy for feedback result - acc["feedback"][key_name], data["feedback"][key_name] = calculate_accuracy(key_name, inference_result, feedback_result) - acc["reviewed"][key_name], data["reviewed"][key_name] = calculate_accuracy(key_name, inference_result, reviewed_result) - else: - inference_result[key_name] = [inference_result[key_name]] - feedback_result[key_name] = [feedback_result[key_name]] - reviewed_result[key_name] = [reviewed_result[key_name]] - - acc["feedback"][key_name], data["feedback"][key_name] = calculate_accuracy(key_name, inference_result, feedback_result) - acc["reviewed"][key_name], data["reviewed"][key_name] = calculate_accuracy(key_name, inference_result, reviewed_result) - - acc["feedback"]["purchase_date"] = [max(acc["feedback"]["purchase_date"])] if len(acc["feedback"]["purchase_date"]) > 0 else [] - acc["reviewed"]["purchase_date"] = [max(acc["reviewed"]["purchase_date"])] if len(acc["reviewed"]["purchase_date"]) > 0 else [] - # Count for bad and total images - avg_invoice_feedback = calculate_avg_accuracy(acc, "feedback", ["retailername", "sold_to_party", "purchase_date"]) - avg_invoice_reviewed = calculate_avg_accuracy(acc, "reviewed", ["retailername", "sold_to_party", "purchase_date"]) - if avg_invoice_feedback is not None or avg_invoice_reviewed is not None: - if max([x for x in [avg_invoice_feedback, avg_invoice_reviewed] if x is not None]) < settings.BAD_THRESHOLD: - image_quality_num[1] += 1 - for i, _ in enumerate(acc["feedback"]["imei_number"]): - if acc["feedback"]["imei_number"][i] is not None and acc["reviewed"]["imei_number"][i] is not None: - if max([x for x in [acc["feedback"]["imei_number"][i], acc["reviewed"]["imei_number"][i]] if x is not None]) < settings.BAD_THRESHOLD: - image_quality_num[1] += 1 - # time cost and quality calculation - # TODO: to be deprecated, doc_type would be in file level in the future - try: - for doc_type, doc_profile in request.ai_inference_profile.items(): - doc_type = doc_type.split("_")[0] - inference_time = doc_profile["inference"][1][0] - doc_profile["inference"][0] - postprocess_time = doc_profile["postprocess"][1] - doc_profile["postprocess"][0] - time_cost[doc_type].append(inference_time + postprocess_time) - except Exception as e: - error = f"Request id {request.request_id} failed with error: {e}" - - return acc, data, time_cost, image_quality_num, error - def mean_list(l): l = [x for x in l if x is not None] if len(l) == 0: @@ -1088,5 +991,4 @@ def mean_list(l): return sum(l)/len(l) def shadow_report(report_id, query): - c_connector.make_a_report_2( - (report_id, query)) + c_connector.make_a_report_2((report_id, query))