OpenCV.putext: проблема только с массивами размера 1 - PullRequest
0 голосов
/ 04 февраля 2019

В этом скрипте ниже я экспериментирую с OpenCV и вычисляю расстояние до веб-камеры моего ноутбука для обнаружения лица с помощью каскадов Хаара.Я использую ноутбук с Windows 10 с веб-камерой, Python 3.6 и OpenCV 3.4.

У меня возникла проблема с OpenCV.putext, показывающая это вычисленное значение на видеопотоке…

        text = "Inches{}".format(np.int(inches))
        cv2.putText(gray, text, (roi[0] - 10, roi[1] - 10),
                cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 2)

Код будет запускаться, если он закомментирован. Любые советы о том, что я делаю неправильно, будут с благодарностью приняты!

import numpy as np
import imutils
import cv2
from imutils.video import VideoStream
from imutils.video import FPS
import time



def distance_to_camera(knownWidth, focalLength, perWidth):
    # compute and return the distance from the maker to the camera
    return (knownWidth * focalLength) / perWidth

face_cascade = cv2.CascadeClassifier('C:/Users/Haar/frontalFace10/haarcascade_frontalface_alt.xml')

#Calculated from a different script
focalLength = 709.0909090909091

#average human head width
knownWidth = 7


# Initialize mutithreading the video stream.
camera = VideoStream(src=0).start()

# Allow the camera to warm up.
time.sleep(2.0)

#start FPS
fps = FPS().start()

roi = None

while True:
        image = camera.read()
        image = imutils.resize(image, width=500)

        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5);
        for (x, y, w, h) in faces:
                cv2.rectangle(gray,(x,y),(x+w,y+h),(255,255,255),2)
                roi = gray[y:y+h, x:x+w]

        if roi is None:
                pass
        else:
                inches = distance_to_camera(knownWidth, focalLength, roi.shape[1])
                print(inches)
                text = "Inches{:.2f}".format(np.int(inches))
                cv2.putText(gray, text, (roi[0] - 10, roi[1] - 10),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 2)


        cv2.imshow("gray", gray)
        key = cv2.waitKey(1) & 0xFF

        fps.update()

        # if the `q` key was pressed, break from the loop
        if key == ord("q"):
                break

fps.stop()
print("[INFO] elapsed time: {:.2f}".format(fps.elapsed()))
print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))

camera.stop()
cv2.destroyAllWindows()

Это полный возврат ошибки:

Traceback (most recent call last):
  File "C:\Users\distance-to-camera\selectHaar3.py", line 53, in <module>
    cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 2)
TypeError: only size-1 arrays can be converted to Python scalars
>>> 

1 Ответ

0 голосов
/ 04 февраля 2019

roi[0] и roi[1] - массивы.Я думаю, что вы пытаетесь сделать это:

cv2.putText(gray, text, (x - 10, y - 10),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 255), 2)
...