Решил вставить в пользовательский компонент 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
Не работает...
Наверняка, я не знаю как организовать в Питоне две команды друг за другом. Не подскажете как?