You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
5.2 KiB
Python
133 lines
5.2 KiB
Python
#!/usr/bin/python
|
|
import detect
|
|
import timeit
|
|
import cv2
|
|
import socket
|
|
import time
|
|
|
|
from imutils.video import FPS
|
|
calibration_width = 0.75
|
|
image = "img7.jpg"
|
|
images = ("img.jpg", "img3.jpg", "img4.jpg", "img5.jpg", "img6.jpg", "img7.jpg", "img8.jpg")
|
|
#images = ("img.jpg", "img2.jpg")
|
|
video = True
|
|
def go():
|
|
for file in images:
|
|
items,output = detect.detect(calibration_width, file, True, False)
|
|
print(str(items))
|
|
if "Penny" in items:
|
|
items.remove("Penny")
|
|
itema = items[0]
|
|
valid = True
|
|
for item in items:
|
|
if item != itema:
|
|
print("Too many items!")
|
|
valid = False
|
|
break
|
|
if valid:
|
|
print("Found " + itema)
|
|
#selectedBin = sort.sort(itema)
|
|
#control_motor.goToBin(selectedBin)
|
|
|
|
def sendString(string):
|
|
print("[ INFO ] Item found: " + string)
|
|
try:
|
|
conn.sendall(string.encode('utf-8'))
|
|
except socket.error:
|
|
print("[ EXIT ] Socket connection error.")
|
|
|
|
|
|
if not video:
|
|
elapsed_time = timeit.timeit(go, number=1)/1
|
|
print(elapsed_time)
|
|
|
|
else :
|
|
#capture = cv2.VideoCapture('tcpclientsrc port=5001 host=192.168.1.129 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! videorate ! video/x-raw,framerate=5/1 ! appsink', cv2.CAP_GSTREAMER)
|
|
capture = cv2.VideoCapture('udpsrc port=9000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" ! rtph264depay ! avdec_h264 ! videoconvert ! appsink sync=false', cv2.CAP_GSTREAMER)
|
|
host = '' # Symbolic name meaning all available interfaces
|
|
port = 9001 # Arbitrary non-privileged port
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
#s.setsockopt(s, socket.SOL_SOCKET, socket.SO_REUSEADDR)
|
|
s.bind((host, port))
|
|
print("[ INFO ] TCP stream initialized. Waiting for client...")
|
|
s.listen(1)
|
|
conn, addr = s.accept()
|
|
print('[ INFO ] Connected to ', addr)
|
|
time.sleep(2)
|
|
waitForPi = True
|
|
while waitForPi is True:
|
|
try:
|
|
print("[ INFO ] Waiting for confirmation message.")
|
|
data = conn.recv(1024)
|
|
if not data: break
|
|
encoding = 'utf-8'
|
|
print ("[ INFO ] Message recieved: "+str(data))
|
|
waitForPi = False
|
|
except socket.error:
|
|
print("[ EXIT ] Socket connection error.")
|
|
break
|
|
# server command for imx135 camera ./video2stdout | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=192.168.43.152 port=5001
|
|
# server command for udp: ./video2stdout | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink host=192.168.43.40 port=9000
|
|
x = 0
|
|
currentItem = ""
|
|
samples = 0
|
|
while True:
|
|
ret = capture.grab()
|
|
x+=1
|
|
if not ret:
|
|
print('[ EXIT ] Empty frame received.')
|
|
break
|
|
#print('frame')
|
|
if x > 1:
|
|
ret,frame = capture.retrieve()
|
|
frame = frame[130:1100, 300:1300]
|
|
#frame = frame[170:900, 475:1100]
|
|
items,output = detect.detect(calibration_width, frame, True, True)
|
|
cv2.imshow('Item Sorter', output)
|
|
x = 0
|
|
if len(items) > 0:
|
|
#items.remove("Penny")
|
|
sendString("Pause ")
|
|
itema = items[0]
|
|
valid = True
|
|
for item in items:
|
|
if item != itema:
|
|
#print("[ INFO ] More than one object present.")
|
|
valid = False
|
|
break
|
|
if valid:
|
|
if currentItem == itema:
|
|
samples += 2
|
|
else:
|
|
currentItem = itema
|
|
samples = 0
|
|
if samples >= 10:
|
|
samples = 0
|
|
capture.release()
|
|
sendString(currentItem)
|
|
waitForPi = True
|
|
while waitForPi is True:
|
|
try:
|
|
data = conn.recv(1024)
|
|
if not data: break
|
|
#print(str(data))
|
|
if str(data) == "b'Continue'":
|
|
waitForPi = False
|
|
capture = cv2.VideoCapture('udpsrc port=9000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" ! rtph264depay ! avdec_h264 ! videoconvert ! appsink sync=false', cv2.CAP_GSTREAMER)
|
|
print("[ INFO ] Waiting for the next item")
|
|
except socket.error:
|
|
print("[ EXIT ] Socket connection error.")
|
|
break
|
|
else:
|
|
if samples > 0:
|
|
samples -= 1
|
|
if samples == 0:
|
|
sendString("Intake")
|
|
if cv2.waitKey(1)&0xFF == ord('q'):
|
|
print("[ EXIT ] Shutting down.")
|
|
s.shutdown(1)
|
|
s.close()
|
|
break
|
|
|