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 ("\n machineCode: " , 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 ("\n license: " , license )
27
+
28
+ ret = setActivation (license .encode ('utf-8' ))
29
+ print ("\n activation: " , 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 )
0 commit comments