justin2341 commited on
Commit
3b918d2
·
verified ·
1 Parent(s): c74e333

Update demo.py

Browse files
Files changed (1) hide show
  1. demo.py +77 -159
demo.py CHANGED
@@ -1,159 +1,77 @@
1
- import sys
2
- sys.path.append('.')
3
-
4
- import os
5
- import base64
6
- import json
7
- from ctypes import *
8
- from alprsdk import initSDK, getLicensePlate, getMachineCode, freeLicenseResults, setActivation
9
- import cv2
10
- import numpy as np
11
- from flask import Flask, request, jsonify
12
-
13
-
14
- licensePath = "license.txt"
15
- license = ""
16
-
17
- machineCode = getMachineCode()
18
- print("\nmachineCode: ", machineCode.decode('utf-8'))
19
-
20
- try:
21
- with open(licensePath, 'r') as file:
22
- license = file.read().strip()
23
- except IOError as exc:
24
- print("failed to open license.txt: ", exc.errno)
25
-
26
- print("\nlicense: ", license)
27
-
28
- ret = setActivation(license.encode('utf-8'))
29
- print("\nactivation: ", ret)
30
-
31
- ret = initSDK()
32
- print("init: ", ret)
33
-
34
- app = Flask(__name__)
35
-
36
- def mat_to_bytes(mat):
37
- """
38
- Convert cv::Mat image data (NumPy array in Python) to raw bytes.
39
- """
40
- # Encode cv::Mat as PNG bytes
41
- is_success, buffer = cv2.imencode(".png", mat)
42
- if not is_success:
43
- raise ValueError("Failed to encode cv::Mat image")
44
- return buffer.tobytes()
45
-
46
- @app.route('/alpr', methods=['POST'])
47
- def alpr():
48
- result = "None"
49
- license = {}
50
- box = {}
51
-
52
- file = request.files['file']
53
-
54
- try:
55
- image = cv2.imdecode(np.frombuffer(file.read(), np.uint8), cv2.IMREAD_COLOR)
56
-
57
- except:
58
- result = "Failed to open file1"
59
- response = jsonify({"result": result, "plate number": license, "coordinate": box})
60
-
61
- response.status_code = 200
62
- response.headers["Content-Type"] = "application/json; charset=utf-8"
63
- return response
64
-
65
-
66
- img_byte = mat_to_bytes(image)
67
-
68
- recog_array = (c_int * 1024)() # Assuming a maximum of 256 rectangles
69
-
70
- license_plate_ptr = POINTER(c_char_p)()
71
- cnt = getLicensePlate(img_byte, len(img_byte), byref(license_plate_ptr), recog_array)
72
-
73
- license_plate = [license_plate_ptr[i].decode('utf-8') for i in range(cnt)]
74
- rectangles = [
75
- (recog_array[i * 4], recog_array[i * 4 + 1], recog_array[i * 4 + 2], recog_array[i * 4 + 3])
76
- for i in range(cnt)]
77
-
78
- freeLicenseResults(license_plate_ptr, cnt)
79
-
80
- # print("number: ", cnt, rectangles, license_plate)
81
- if cnt == 0:
82
- result = "Nothing Detected !"
83
- response = jsonify({"result": result, "plate number": license, "coordinate": box})
84
-
85
- response.status_code = 200
86
- response.headers["Content-Type"] = "application/json; charset=utf-8"
87
- return response
88
-
89
- result = "License Plate Number Detected !"
90
- for i in range(cnt):
91
- license[f"vehicle {i + 1}"] = license_plate[i]
92
- box[f"vehicle {i + 1}"] = rectangles[i]
93
-
94
- response = jsonify({"result": result, "plate number": license, "coordinate": box})
95
-
96
- response.status_code = 200
97
- response.headers["Content-Type"] = "application/json; charset=utf-8"
98
- return response
99
-
100
- @app.route('/alpr_base64', methods=['POST'])
101
- def alpr_base64():
102
-
103
- result = "None"
104
- license = {}
105
- box = {}
106
-
107
- content = request.get_json()
108
-
109
- try:
110
- imageBase64 = content['base64']
111
- image_data = base64.b64decode(imageBase64)
112
- np_array = np.frombuffer(image_data, np.uint8)
113
- image = cv2.imdecode(np_array, cv2.IMREAD_COLOR)
114
- except:
115
- result = "Failed to open file1"
116
- response = jsonify({"result": result, "plate number": license, "coordinate": box})
117
-
118
- response.status_code = 200
119
- response.headers["Content-Type"] = "application/json; charset=utf-8"
120
- return response
121
-
122
-
123
- img_byte = mat_to_bytes(image)
124
-
125
- recog_array = (c_int * 1024)() # Assuming a maximum of 256 rectangles
126
-
127
- license_plate_ptr = POINTER(c_char_p)()
128
- cnt = getLicensePlate(img_byte, len(img_byte), byref(license_plate_ptr), recog_array)
129
-
130
- license_plate = [license_plate_ptr[i].decode('utf-8') for i in range(cnt)]
131
- rectangles = [
132
- (recog_array[i * 4], recog_array[i * 4 + 1], recog_array[i * 4 + 2], recog_array[i * 4 + 3])
133
- for i in range(cnt)]
134
-
135
- freeLicenseResults(license_plate_ptr, cnt)
136
-
137
- # print("number: ", cnt, rectangles, license_plate)
138
- if cnt == 0:
139
- result = "Nothing Detected !"
140
- response = jsonify({"result": result, "plate number": license, "coordinate": box})
141
-
142
- response.status_code = 200
143
- response.headers["Content-Type"] = "application/json; charset=utf-8"
144
- return response
145
-
146
- result = "License Plate Number Detected !"
147
- for i in range(cnt):
148
- license[f"vehicle {i + 1}"] = license_plate[i]
149
- box[f"vehicle {i + 1}"] = rectangles[i]
150
-
151
- response = jsonify({"result": result, "plate number": license, "coordinate": box})
152
-
153
- response.status_code = 200
154
- response.headers["Content-Type"] = "application/json; charset=utf-8"
155
- return response
156
-
157
- if __name__ == '__main__':
158
- port = int(os.environ.get("PORT", 8080))
159
- app.run(host='0.0.0.0', port=port)
 
1
+ import gradio as gr
2
+ import requests
3
+ from PIL import Image
4
+ import io
5
+ import cv2
6
+ import numpy as np
7
+
8
+ palmprint_count = 0
9
+
10
+ def compare_palmprint(frame1, frame2):
11
+ global palmprint_count
12
+
13
+ palmprint_count = palmprint_count + 1
14
+
15
+ url = "http://127.0.0.1:8080/compare_palmprint"
16
+ files = {'file1': open(frame1, 'rb'), 'file2': open(frame2, 'rb')}
17
+
18
+ r = requests.post(url=url, files=files)
19
+
20
+ html = None
21
+
22
+ compare_result = r.json().get('compare_result')
23
+ compare_similarity = r.json().get('compare_similarity')
24
+
25
+ html = ("<table>"
26
+ "<tr>"
27
+ "<th>Compare Result</th>"
28
+ "<th>Value</th>"
29
+ "</tr>"
30
+ "<tr>"
31
+ "<td>Result</td>"
32
+ "<td>{compare_result}</td>"
33
+ "</tr>"
34
+ "<tr>"
35
+ "<td>Similarity</td>"
36
+ "<td>{compare_similarity}</td>"
37
+ "</tr>"
38
+ "</table>".format(compare_result=compare_result, compare_similarity=compare_similarity))
39
+
40
+ return [html]
41
+
42
+ with gr.Blocks() as demo:
43
+ gr.Markdown(
44
+ """
45
+ # KBY-AI License Plate Recognition
46
+ We offer SDKs for face recognition, liveness detection(anti-spoofing), ID card recognition and ID document liveness detection.
47
+ We also specialize in providing outsourcing services with a variety of technical stacks like AI(Computer Vision/Machine Learning), mobile apps, and web apps.
48
+
49
+ ##### KYC Verification Demo - https://github.com/kby-ai/KYC-Verification-Demo-Android
50
+ ##### ID Capture Web Demo - https://id-document-recognition-react-alpha.vercel.app
51
+ """
52
+ )
53
+
54
+ with gr.TabItem("License Plate Recognition"):
55
+ gr.Markdown(
56
+ """
57
+ ##### Docker Hub - https://hub.docker.com/r/kbyai/license-plate-recognition
58
+ ```bash
59
+ sudo docker pull kbyai/license-plate-recognition:latest
60
+ sudo docker run -v ./license.txt:/home/openvino/kby-ai-alpr/license.txt -p 8081:8080 -p 9001:9000 kbyai/license-plate-recognition:latest
61
+ ```
62
+ """
63
+ )
64
+ with gr.Row():
65
+ with gr.Column():
66
+ alpr_image_input = gr.Image(type='filepath', height=300)
67
+ gr.Examples(['alpr_examples/test1.jpg', 'alpr_examples/test2.jpg', 'alpr_examples/test3.jpg'],
68
+ inputs=alpr_image_input)
69
+ alpr_confirmation_button = gr.Button("Confirm")
70
+ with gr.Column():
71
+ with gr.Column():
72
+ alpr_output = gr.Image(type="numpy")
73
+
74
+ alpr_confirmation_button.click(alpr, inputs=alpr_image_input, outputs=alpr_output)
75
+ gr.HTML('<a href="https://visitorbadge.io/status?path=https%3A%2F%2Fweb.kby-ai.com%2F"><img src="https://api.visitorbadge.io/api/combined?path=https%3A%2F%2Fweb.kby-ai.com%2F&label=VISITORS&countColor=%23263759" /></a>')
76
+
77
+ demo.launch(server_name="0.0.0.0", server_port=7860)