Я запускал скрипт python с nodejs с использованием пакета python-shell .. и получаю эту ошибку:
Error: init done
at PythonShell.parseError (F:\github\pythonShellDemo\node_modules\python-shell\index.js:191:17)
at terminateIfNeeded (F:\github\pythonShellDemo\node_modules\python-shell\index.js:98:28)
at ChildProcess.<anonymous> (F:\github\pythonShellDemo\node_modules\python-shell\index.js:89:9)
at emitTwo (events.js:126:13)
at ChildProcess.emit (events.js:214:7)
at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
после некоторой отладки и исследования я узнал, что эта ошибка связана с opencv, но я не могу найти никакого решения ..
вот код:
import cv2
import zbar
from PIL import Image
import sys
video = cv2.VideoCapture(0)
count=0
qrcode=[]
while True:
ret, frame = video.read()
cv2.imshow('Camera', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
grayscale = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
image = Image.fromarray(grayscale)
width, height = image.size
zbarimage = zbar.Image(width, height,'Y800', image.tobytes())
scanner = zbar.ImageScanner()
scanner.scan(zbarimage)
for x in zbarimage:
if count == 0:
qrcode=x.data
count=count+1
if qrcode:
break
video.release()
cv2.destroyAllWindows()
print(qrcode)
sys.stdout.flush()
Я использую Python 2.7
ОБНОВИТЬ: Код nodejs для вызова скрипта Python:
PythonShell.run('python/scan.py', options, function (err, results) {
if (err) {
console.info(err)
reject(err)
}
// results is an array consisting of messages collected during execution
console.info(results)
resolve(results)
})
ОБНОВИТЬ: я пробовал запустить opencv только без zbar .. все равно ошибка
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
@ DanMašek, да, он отлично работает сам по себе ... и я попытался отключить эти предупреждения, но безуспешно
@ DanMašek, я попытался удалить код opencv и запустить скрипт со всем тем же .. он работает отлично, без ошибок ..
@ DanMašek, я обновил свой вопрос
Круто, я думаю, у вас есть два возможных виновника - либо VideoCapture, либо код highgui (imshow и родственные ему). Попробуйте еще немного уменьшить;) | Кстати, где этот код работает, когда вы вызываете его из node.js? Просто спрашиваю, потому что иногда люди пытаются использовать highgui на стороне сервера.






Библиотека OpenCV выводит init done на стандартный вывод ошибок. Это не ошибка, а просто отладочный отпечаток. python-shell затем превращает это в ошибку. Из документации python-shell:
If the script writes to stderr or exits with a non-zero code, an error will be thrown.
Подавление вывода возможно только с помощью перекомпиляция библиотеки с набором параметров.
Интересно. На какой платформе это работает, на каком бэкенде с поддержкой Highgui? Например. Я еще не видел, чтобы это происходило в окнах. | Однако, если вывод в stderr является фатальным, тогда OpenCV может быть проблемой, поскольку даже пойманные и обработанные исключения в конечном итоге печатаются в stderr (в следующем выпуске будет способ избежать этого).
Этот сценарий работает правильно сам по себе? Выводит ли он что-нибудь подобное сообщению об ошибке "init done"? Может быть, это просто какое-то предупреждение, который вы могли бы отключить (не похоже ни на что, что я видел вывод OpenCV, может быть,
zbarделает это)? В противном случае уменьшите этот сценарий до минимальный воспроизводимый пример, который все еще воспроизводит ошибку, и обновите свой вопрос.