31_train_deploy_model.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. #!/usr/bin/env python
  2. #version : 2023.06.01
  3. #language : ch
  4. #hardware : pi
  5. from maix import camera, display, zbar, image
  6. import socket
  7. import os
  8. import sys
  9. sys.path.append('/root/')
  10. import http.client
  11. from CocoPi import BUTTON
  12. import time
  13. import json
  14. import requests
  15. key_A = BUTTON(14)
  16. key_B = BUTTON(8)
  17. key_C = BUTTON(13)
  18. key_D = BUTTON(7)
  19. ScreenOrientation = False
  20. image.load_freetype("/root/preset/fonts/SourceHanSansCN-Regular.otf")
  21. camera.camera.config(size=(240,320))
  22. def getWifiConnectState():
  23. cmd = "wifi_get_connection_info_test 1"
  24. res = os.popen(cmd).read()
  25. wifiInfo = {}
  26. if res.find('get connection infomation successfully!') != -1:
  27. wifiInfo["state"]=True
  28. wifiInfo["AP"] = res[res.find("Connected AP: ")+13:res.find("IP address: ")-1]
  29. wifiInfo["IP"] = res[res.find("IP address: ")+12:res.find("frequency")-1]
  30. wifiInfo["frequency"] = res[res.find("frequency: ")+10:res.find("RSSI")-1]
  31. wifiInfo["RSSI"] = res[res.find("RSSI: ")+6:res.find("link_speed")-1]
  32. wifiInfo["link_speed"] = res[res.find("link_speed: ")+10:res.find("IP address: ")-1]
  33. wifiInfo["noise"] = res[res.find("noise: ")+6:res.find("noise: ")+11]
  34. else:
  35. wifiInfo["state"]=False
  36. wifiInfo["AP"] = "N/A"
  37. wifiInfo["IP"] = "N/A"
  38. wifiInfo["frequency"] = "N/A"
  39. wifiInfo["RSSI"] = "N/A"
  40. wifiInfo["link_speed"] = "N/A"
  41. wifiInfo["noise"] = "N/A"
  42. return wifiInfo
  43. canvas = image.new(size=(320, 240),color = (15,21,46),mode = "RGB")
  44. canvas.draw_string(8 , 100 , "正在检查网络连接状态...", scale = 1, color = (255,255,255), thickness = 1)
  45. display.show(canvas)
  46. def lcdRotation(inputImg,rotationAngle):
  47. from maix import image
  48. imageRotationBuffer = inputImg.crop(0, 0, 240, 320)
  49. if ScreenOrientation:
  50. imgRotationAim = image.new(size = (240, 320))
  51. else:
  52. imgRotationAim = image.new(size = (320, 240))
  53. return imgRotationAim.draw_image(imageRotationBuffer.rotate(rotationAngle, adjust=1),0,0,alpha=1)
  54. if ScreenOrientation:
  55. CAMERAROTATE = +180
  56. else:
  57. CAMERAROTATE = +90
  58. def urldownload(url,filepath=None,filename=None,canvas1=image.new(size = (320, 40))):
  59. """
  60. 下载文件到指定目录
  61. :param url: 文件下载的url
  62. :param filename: 要存放的目录及文件名,例如:./test.xls
  63. :return:
  64. """
  65. headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
  66. down_res = requests.get(url,headers=headers,stream=True)
  67. chunk_size = 1024 * 1024 # 单次请求最大值
  68. content_size = int(down_res.headers['content-length']) # 内容体总大小
  69. data_count = 0
  70. with open(filepath,'wb') as file:
  71. for data in down_res.iter_content(chunk_size=chunk_size):
  72. file.write(data)
  73. data_count = data_count + len(data)
  74. now_jd = (data_count / content_size) * 100
  75. # print("\r 文件下载进度:%d%%(%d/%d) - %s" % (now_jd, data_count, content_size, filename), end=" ")
  76. canvas1.clear()
  77. canvas1.draw_string(0,0,str("下载中: ") + filename, scale = 1, color = (255, 0, 0), thickness = 2)
  78. canvas1.draw_string(0,20 , str("进度: %d%%(%d/%d)" % (now_jd, data_count, content_size)), scale = 1, color = (255, 0, 0), thickness = 2) #内框ID
  79. display.show(canvas1)
  80. # time.sleep(1)
  81. # return down_res.code
  82. def getWifiConnectState():
  83. cmd = "wifi_get_connection_info_test 1"
  84. res = os.popen(cmd).read()
  85. wifiInfo = {}
  86. if res.find('get connection infomation successfully!') != -1:
  87. wifiInfo["state"]=True
  88. wifiInfo["AP"] = res[res.find("Connected AP: ")+13:res.find("IP address: ")-1]
  89. wifiInfo["IP"] = res[res.find("IP address: ")+12:res.find("frequency")-1]
  90. wifiInfo["frequency"] = res[res.find("frequency: ")+10:res.find("RSSI")-1]
  91. wifiInfo["RSSI"] = res[res.find("RSSI: ")+6:res.find("link_speed")-1]
  92. wifiInfo["link_speed"] = res[res.find("link_speed: ")+10:res.find("IP address: ")-1]
  93. wifiInfo["noise"] = res[res.find("noise: ")+6:res.find("noise: ")+11]
  94. else:
  95. wifiInfo["state"]=False
  96. wifiInfo["AP"] = "N/A"
  97. wifiInfo["IP"] = "N/A"
  98. wifiInfo["frequency"] = "N/A"
  99. wifiInfo["RSSI"] = "N/A"
  100. wifiInfo["link_speed"] = "N/A"
  101. wifiInfo["noise"] = "N/A"
  102. return wifiInfo
  103. def getPrivateIp():
  104. st = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
  105. try:
  106. st.connect(("10.255.255.255",1))
  107. IP = st.getsockname()[0]
  108. except Exception:
  109. IP = "127.0.0.1"
  110. finally:
  111. st.close()
  112. return IP
  113. canvas1 = image.new(size = (320, 40))
  114. ssidInfo = ""
  115. passwordInfo = ""
  116. checkConnectState = False
  117. connectText = ""
  118. startConnect=False
  119. param = ''
  120. bin = ''
  121. py = ''
  122. startConnectWifi=False
  123. wifiConnectState = False
  124. # PublicIp=""
  125. PrivateIP=""
  126. runConnectSig=True
  127. connectSuccessSig=False
  128. while True:
  129. canvas = lcdRotation(camera.capture(),CAMERAROTATE)
  130. IP = getPrivateIp()
  131. if ssidInfo!="" and passwordInfo!="":
  132. startConnectWifi=True
  133. #connectText = "Waitting for Connection..."
  134. #canvas.draw_string(10,40, ssidInfo+" "+str(len(ssidInfo))+" "+str(type(ssidInfo)), scale = 1.5, color = (0,0,0), thickness = 1)
  135. canvas.draw_string(10,50, "正在连接WIFI,请等待...", scale = 1.5, color = (0,0,0), thickness = 1)
  136. display.show(canvas)
  137. if startConnectWifi==True:
  138. canvas_1 = image.new(size = (320, 320), color = (255,255,255), mode = "RGB")
  139. canvas.draw_image(canvas_1,0,0, alpha=0.4)
  140. if wifiConnectState == True:
  141. if key_B.is_pressed():
  142. while (key_B.is_pressed() == True):
  143. time.sleep(0.001)
  144. startConnectWifi= False
  145. connectText = ""
  146. checkConnectState = False
  147. connectSuccessSig = False
  148. wifiConnectState = False
  149. runConnectSig== True
  150. ssidInfo=""
  151. passwordInfo=""
  152. if checkConnectState == True:
  153. if connectSuccessSig == False:
  154. # PublicIp=getPublicIp()
  155. PrivateIP=getPrivateIp()
  156. connectSuccessSig = True
  157. canvas.draw_string(10,50, "WiFi连接成功!", scale = 1.5, color = (0,0,0) , thickness = 1)
  158. canvas.draw_string(10,110, "局域网IP:" + PrivateIP, scale = 1.5, color = (0,0,0), thickness = 1)
  159. canvas.draw_image((image.open("/root/preset/img/restart_ff0000_24x24.png")).rotate(0, adjust=0),8,216,alpha=1)
  160. display.show(canvas)
  161. ssidInfo=""
  162. passwordInfo=""
  163. time.sleep(3)
  164. canvas.clear()
  165. break
  166. else:
  167. pass
  168. else:
  169. if checkConnectState == False:
  170. os.system("wifi_disconnect_ap_test")
  171. os.system('wifi_connect_chinese_ap_test '+ssidInfo+' '+passwordInfo+'')
  172. wifiConnectState=getWifiConnectState()["state"]
  173. checkConnectState = True
  174. if checkConnectState == True:
  175. if key_B.is_pressed():
  176. while (key_B.is_pressed() == True):
  177. time.sleep(0.001)
  178. startConnectWifi= False
  179. connectText = ""
  180. checkConnectState = False
  181. connectSuccessSig = False
  182. wifiConnectState = False
  183. runConnectSig== True
  184. passwordInfo = ""
  185. ssidInfo = ""
  186. else:
  187. if runConnectSig== True:
  188. connectText = "正在连接WIFI,请等待..."
  189. runConnectSig= False
  190. else:
  191. passwordInfo = ""
  192. ssidInfo = ""
  193. connectText = "WIFI连接失败!"
  194. canvas.draw_image((image.open("/root/preset/img/restart_ff0000_24x24.png")).rotate(0, adjust=0),8,216,alpha=1)
  195. canvas.draw_string(10,50, connectText, scale = 1.5, color = (0,0,0) , thickness = 1)
  196. else:
  197. mks = canvas.find_qrcodes()
  198. for mk in mks:
  199. #外框数据
  200. X = mk['x']
  201. Y = mk['y']
  202. W = mk['w']
  203. H = mk['h']
  204. #二维码信息
  205. string = mk['payload']
  206. codeData = string.split(";")
  207. ssidInfo = codeData[0].split(":")[1]
  208. passwordInfo = codeData[1].split(":")[1]
  209. #画外框
  210. canvas.draw_rectangle(X, Y, X + W, Y + H, color=(0, 0, 255), thickness = 2)
  211. #打印信息
  212. canvas.draw_string(int(X) , int(Y - 45) , "WIFI名:"+ssidInfo, scale = 1, color = (255, 0, 0), thickness = 2) #内框ID
  213. canvas.draw_string(int(X) , int(Y - 25) , "密码:"+passwordInfo, scale = 1, color = (255, 0, 0), thickness = 2) #内框ID
  214. canvas.draw_image((image.open("/root/preset/img/exit_ff0000_24x24.png")).rotate(0, adjust=0),288,216,alpha=1)
  215. # canvas.draw_image((image.open("/root/preset/img/camera_bfbfbf_24x24.png")).rotate(0, adjust=0),292,2,alpha=1)
  216. display.show(canvas)
  217. while True:
  218. canvas = lcdRotation(camera.capture(),CAMERAROTATE)
  219. # IP = extract_ip()
  220. if(str(param) != '' and str(bin) != '' and str(py) != ''):
  221. startConnect=True
  222. if startConnect==True:
  223. canvas.clear()
  224. time.sleep(5)
  225. urldownload("https://" + bin.split("//")[1],"/root/user/model/" + (str(bin).split("newModels/")[1].split("/")[0]) + ".bin",(str(bin).split("newModels/")[1].split("/")[0]) + ".bin",canvas1)
  226. urldownload("https://" + param.split("//")[1],"/root/user/model/" + (str(param).split("newModels/")[1].split("/")[0]) + ".param", (str(param).split("newModels/")[1].split("/")[0]) + ".param",canvas1)
  227. urldownload("https://" + py.split("//")[1],"/root/" + (str(py).split("newModels/")[1].split("/")[1]),"user_latest_code.py",canvas1)
  228. break
  229. else:
  230. mks = canvas.find_qrcodes()
  231. for mk in mks:
  232. #外框数据
  233. X = mk['x']
  234. Y = mk['y']
  235. W = mk['w']
  236. H = mk['h']
  237. #二维码信息
  238. try:
  239. string = mk['payload']
  240. codeData = json.loads(string)
  241. param = codeData['param']
  242. bin = codeData['bin']
  243. py = codeData['py']
  244. except:
  245. pass
  246. #画外框
  247. canvas.draw_rectangle(X, Y, X + W, Y + H, color=(0, 0, 255), thickness = 2)
  248. #打印信息
  249. canvas.draw_string(int(X) , int(Y - 35) , str(string), scale = 1, color = (255, 0, 0), thickness = 2) #内框ID
  250. canvas.draw_string(0, 0 , "扫描二维码来下载模型", scale = 1, color = (255, 0, 0), thickness = 2) #内框ID
  251. canvas.draw_image((image.open("/root/preset/img/exit_ff0000_24x24.png")).rotate(0, adjust=0),290,208,alpha=1)
  252. display.show(canvas)
  253. os.system("ln -sf %s /tmp/event && touch /tmp/start" % "/root/user_latest_code.py")