moodmeter/run.py

88 lines
2.3 KiB
Python

#sudo ~/build/opencv-webcam-demo/opencv-webcam-demo --data ~/affdex-sdk/data --faceMode 1 --numFaces 40 --draw 1
#sudo ~/build/opencv-webcam-demo/opencv-webcam-demo --data ~/affdex-sdk/data --faceMode 1 --numFaces 100 -o ~/output -f ~/emo_in_file.jpg
import subprocess
import json
import threading
import logging
logging.basicConfig(level=logging.DEBUG,
format='(%(threadName)-10s) %(message)s',
)
outputDir = "/home/crowd/output"
tmpImgFile = "/home/crowd/emo_in_file.jpg"
def handleLine(msg):
try:
j = json.loads(msg)
except Exception as e:
logging.error("Couldn't parse json " + msg)
return
#now we have json
logging.debug(j)
print " ".join([
'gphoto2',
"--port", "usb:",
"--capture-image-and-download",
"-I", "1", # photo every second
"--filename="+tmpImgFile, "--force-overwrite",
])
print " ".join([
'/home/crowd/build/opencv-webcam-demo/opencv-webcam-demo',
"--data", "/home/crowd/affdex-sdk/data",
"--faceMode", "1",
"--numFaces", "40",
"--draw", "1",
"-o", outputDir,
"-f", tmpImgFile,
])
# gphoto2 --port usb: --capture-image-and-download -I 1 --filename=~/test.jpg --force-overwrite
def captureImages():
procCapture = subprocess.Popen([
'gphoto2',
"--port", "usb:",
"--capture-image-and-download",
"-I", "1", # photo every second
"--filename="+tmpImgFile, "--force-overwrite",
],stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while procCapture.poll() is None:
line = procCapture.stdout.readline()
if line == '':
continue
logging.debug(line)
if line.startswith("*** Error"):
raise Exception("Camera not found on USB, or unable to claim it")
return
def processImages():
procProcess = subprocess.Popen([
'/home/crowd/build/opencv-webcam-demo/opencv-webcam-demo',
"--data", "/home/crowd/affdex-sdk/data",
"--faceMode", "1",
"--numFaces", "40",
"--draw", "1",
"-o", outputDir,
"-f", tmpImgFile,
],stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while procProcess.poll() is None:
line = procProcess.stdout.readline()
if line == '':
continue
handleLine(line)
return
captureThread = threading.Thread(name='capture', target=captureImages)
processThread = threading.Thread(name='process', target=processImages)
captureThread.start()
processThread.start()