Pārlūkot izejas kodu

complete adapi_driver_camera_python

yuchuli 5 mēneši atpakaļ
vecāks
revīzija
6cafd46318

+ 1 - 1
src/api/adapi_driver_camera_python/PyModuleCommModule.py

@@ -58,7 +58,7 @@ class PyModuleComm:
         arr = np.zeros(nBuffSize,dtype=np.int8)
         recvtime = np.zeros(1,dtype=np.int64)
         nrealsize = np.zeros(1,dtype=np.int32)
-        while 1:
+        while self.mbRun:
             nrtn = self.obj.RecvData(arr,nBuffSize,nrealsize,recvtime)
             if nrtn > 0:
                 self.mpcall(arr,nrtn,recvtime)

+ 2 - 0
src/api/adapi_driver_camera_python/Readme.md

@@ -1 +1,3 @@
 protoc *.proto -I=./ --python_out=./
+
+pip3 install opencv-python

+ 32 - 9
src/api/adapi_driver_camera_python/pythoncamera.py

@@ -2,13 +2,34 @@ import modulecommpython
 import numpy as np  
 import time
 import sys  
+import cv2
 import rawpic_pb2
+from io import BytesIO
 
 from PyModuleCommModule import PyModuleComm
 
 time_image = 0
 msg_image = rawpic_pb2.rawpic()
 
+
+def DetectImage(ximage: rawpic_pb2):
+    image_cv = np.zeros((ximage.height,ximage.width, 3), dtype=np.uint8)
+    print("width: ",ximage.width," type: ",ximage.type)
+    if(ximage.type == 1):
+        pass
+    else:
+        nparr = np.frombuffer(ximage.picdata, np.uint8)
+        print("len: ",len(nparr))
+        image_array = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
+        cv2.imshow('Image from JPG Byte Stream', image_array)
+        cv2.waitKey(1)
+        if image_array is not None:
+            print(" decode ok. len: ",len(image_array))            
+        else:
+            print("decode fail.")
+        pass
+    pass
+
 def image_callback(arr : np,nsize,time):  
     global msg_image
     global time_image
@@ -16,21 +37,23 @@ def image_callback(arr : np,nsize,time):
     databytes = sub_arr.tobytes()
     msg = rawpic_pb2.rawpic()
     msg.ParseFromString(databytes)
-    msg_gpsimu = msg
-    time_gpsimu = time
+    msg_image = msg
+    time_image = time
+    DetectImage(msg_image)
 
 def main():  
-    # 初始化一个变量  
-    count = 0
 
     mc = PyModuleComm("image00")
     mc.RegisterRecv(image_callback)
 
-    # 使用while循环,只要count小于10,就继续循环  
-    while count < 10:
-        time.sleep(0.05)
-
-    print("循环结束!")  
+    try:
+        while True:
+            time.sleep(0.05)  # 模拟程序正在工作
+    except KeyboardInterrupt:
+        print("\n捕获到 Ctrl+C,程序正在退出...")
+        mc.stop_thread()
+    finally:
+        print("程序退出完成。")
   
 # 调用main函数  
 if __name__ == "__main__":  

+ 1 - 1
src/api/adapi_driver_lidar_python/PyModuleCommModule.py

@@ -58,7 +58,7 @@ class PyModuleComm:
         arr = np.zeros(nBuffSize,dtype=np.int8)
         recvtime = np.zeros(1,dtype=np.int64)
         nrealsize = np.zeros(1,dtype=np.int32)
-        while 1:
+        while self.mbRun:
             nrtn = self.obj.RecvData(arr,nBuffSize,nrealsize,recvtime)
             if nrtn > 0:
                 self.mpcall(arr,nrtn,recvtime)

+ 1 - 1
src/python/pythondecisiondemo/PyModuleCommModule.py

@@ -58,7 +58,7 @@ class PyModuleComm:
         arr = np.zeros(nBuffSize,dtype=np.int8)
         recvtime = np.zeros(1,dtype=np.int64)
         nrealsize = np.zeros(1,dtype=np.int32)
-        while 1:
+        while self.mbRun:
             nrtn = self.obj.RecvData(arr,nBuffSize,nrealsize,recvtime)
             if nrtn > 0:
                 self.mpcall(arr,nrtn,recvtime)