Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #!/usr/bin/env python3
  2.  
  3. from pathlib import Path
  4. import sys
  5. import cv2
  6. import depthai as dai
  7. import numpy as np
  8. from datetime import datetime
  9. import time
  10. import json
  11. import random
  12. from pathlib import Path
  13. import blobconverter
  14. # Get argument first
  15. nnPath = blobconverter.from_zoo(name="mobilenet-ssd")
  16.  
  17. use_nn = True
  18. preview_size = (300, 300)
  19. sensor_resolution = dai.ColorCameraProperties.SensorResolution.THE_4_K
  20. codec = dai.VideoEncoderProperties.Profile.H265_MAIN
  21. file_extension = 'h265'
  22. fps = 30
  23.  
  24. pipeline = dai.Pipeline()
  25.  
  26. camRgb = pipeline.create(dai.node.ColorCamera)
  27. videoEncoder = pipeline.create(dai.node.VideoEncoder)
  28. nn = None
  29.  
  30. videoOut = pipeline.create(dai.node.XLinkOut)
  31. videoOut.setStreamName("h265")
  32.  
  33. # Properties
  34. camRgb.setBoardSocket(dai.CameraBoardSocket.RGB)
  35. camRgb.setResolution(sensor_resolution)
  36. camRgb.setPreviewSize(preview_size)
  37. camRgb.setInterleaved(False)
  38.  
  39. videoEncoder.setDefaultProfilePreset(fps, codec)
  40. # Linking
  41. camRgb.video.link(videoEncoder.input)
  42. videoEncoder.bitstream.link(videoOut.input)
  43.  
  44. if use_nn:
  45. manip = pipeline.createImageManip()
  46. manip.setResize(300,300)
  47. manip.inputImage.setBlocking(False)
  48. manip.inputImage.setQueueSize(2)
  49. camRgb.preview.link(manip.inputImage)
  50.  
  51. nn = pipeline.create(dai.node.MobileNetDetectionNetwork)
  52. nn.setConfidenceThreshold(0.5)
  53. nn.setBlobPath(nnPath)
  54. nn.setNumInferenceThreads(2)
  55. # nn.input.setBlocking(False)
  56. # nn.input.setBlocking(False)
  57. manip.out.link(nn.input)
  58.  
  59. nnOut = pipeline.create(dai.node.XLinkOut)
  60. nnOut.setStreamName("nn")
  61. nn.out.link(nnOut.input)
  62.  
  63.  
  64. # Connect to device and start pipeline
  65. print(datetime.now().strftime('%H:%M.%S.%f: Starting device'))
  66. with dai.Device(pipeline) as device:
  67.  
  68. print(datetime.now().strftime('%H:%M.%S.%f: Device started'))
  69.  
  70.  
  71. # Queues
  72. queue_size = 8
  73. qDet = None
  74. if use_nn:
  75. qDet = device.getOutputQueue("nn", queue_size)
  76. qRgbEnc = device.getOutputQueue('h265', maxSize=30, blocking=True)
  77.  
  78. frameCount = 0
  79. frameStart = None
  80.  
  81. while True:
  82. inDet = None
  83. if qDet:
  84. inDet = qDet.tryGet()
  85.  
  86. while qRgbEnc.has():
  87. encFrame = qRgbEnc.get()
  88. # Ordinarily we might write this to a file
  89. frameCount += 1
  90.  
  91. if not frameStart:
  92. frameStart = datetime.now()
  93. frameCount = 0
  94. if (datetime.now() - frameStart).total_seconds() > 10:
  95. print("Saw %s frames in 10 seconds" % frameCount)
  96. frameStart = datetime.now()
  97. frameCount = 0
  98.  
  99. time.sleep(.01)