Решил вставить в пользовательский компонент skanform команду обрезания фотографии:
Код: Выделить всё
convert -crop 200x100+50+150 /home/sun/webcamGrab.jpg /home/sun/webcamCrop.jpg
, которая в терминале успешно работает.
Вставил так:
Код: Выделить всё
#!/usr/bin/python
import hal
import subprocess
from subprocess import call
import time
from time import gmtime, strftime
h=hal.component("skanform")
h.newpin("photo", hal.HAL_BIT, hal.HAL_IN)
h.newpin("line", hal.HAL_BIT, hal.HAL_IN)
h.newpin("end", hal.HAL_BIT, hal.HAL_IN)
h.newpin("pdi1", hal.HAL_BIT, hal.HAL_IN)
h.newpin("pdi2", hal.HAL_BIT, hal.HAL_IN)
h.newpin("pdi3", hal.HAL_BIT, hal.HAL_IN)
h.newpin("rem1", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("rem2", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("skill", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("enable", hal.HAL_BIT, hal.HAL_IN)
h.ready()
NN = MM = 1
try:
while 1:
if h['enable']==1:
h['skill'] = 0
if h['photo']==1:
sCommand = '/usr/bin/fswebcam --save /tmp/webcam_%02d%02d.png -d /dev/video0 -r 640x480 --png 0' % (NN, MM)
subprocess.Popen( sCommand , shell=True);
sCommand = '/usr/bin/convert /tmp/webcam_%02d%02d.png 100x100+270+190 /home/sun/cropwebcam%02d%02d.png' % (NN, MM)
subprocess.Popen( sCommand , shell=True);
MM = MM + 1
h['rem1'] = 1
time.sleep(1.5)
else:
h['rem1'] = 0
if h['line']==1:
NN = NN + 1
MM = 1
h['rem2']=1
time.sleep(1.5)
else:
h['rem2'] = 0
if h['end']==1:
h['skill'] = 1
NN = MM = 1
else:
h['skill'] = 0
except KeyboardInterrupt:
raise SystemExit
В результате сканирования получаем несколько снимков, а вот обрезанных снимков - нет...
Подумал, что первая команда - получения снимка, не успевает выполниться, а Питон уже дает следующую - обрезать снимок, которого ещё нет...
Поставил паузу:
Код: Выделить всё
#!/usr/bin/python
import hal
import subprocess
from subprocess import call
import time
from time import gmtime, strftime
h=hal.component("skanform")
h.newpin("photo", hal.HAL_BIT, hal.HAL_IN)
h.newpin("line", hal.HAL_BIT, hal.HAL_IN)
h.newpin("end", hal.HAL_BIT, hal.HAL_IN)
h.newpin("pdi1", hal.HAL_BIT, hal.HAL_IN)
h.newpin("pdi2", hal.HAL_BIT, hal.HAL_IN)
h.newpin("pdi3", hal.HAL_BIT, hal.HAL_IN)
h.newpin("rem1", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("rem2", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("skill", hal.HAL_BIT, hal.HAL_OUT)
h.newpin("enable", hal.HAL_BIT, hal.HAL_IN)
h.ready()
NN = MM = 1
try:
while 1:
if h['enable']==1:
h['skill'] = 0
if h['photo']==1:
sCommand = '/usr/bin/fswebcam --save /tmp/webcam_%02d%02d.png -d /dev/video0 -r 640x480 --png 0' % (NN, MM)
subprocess.Popen( sCommand , shell=True);
time.sleep(0.5)
sCommand = '/usr/bin/convert /tmp/webcam_%02d%02d.png 100x100+270+190 /home/sun/cropwebcam%02d%02d.png' % (NN, MM)
subprocess.Popen( sCommand , shell=True);
MM = MM + 1
h['rem1'] = 1
time.sleep(1.5)
else:
h['rem1'] = 0
if h['line']==1:
NN = NN + 1
MM = 1
h['rem2']=1
time.sleep(1.5)
else:
h['rem2'] = 0
if h['end']==1:
h['skill'] = 1
NN = MM = 1
else:
h['skill'] = 0
except KeyboardInterrupt:
raise SystemExit
Не работает...
Наверняка, я не знаю как организовать в Питоне две команды друг за другом. Не подскажете как?