Кто-нибудь знает, как исправить этот странный cv2.error: OpenCV (4.1.0)? - PullRequest
0 голосов
/ 30 мая 2019

Хорошо.Я получил «простую» домашнюю работу от моего учителя.Домашнее задание было о том, что нужно просто поменять дорожку команды с python.exe. \ AgeGender.py --input. \ Sample.jpg на python.exe. \ AgeGender.py --input. \ Test.jpg

Ссылка набиблиотека файлов: https://drive.google.com/file/d/1gvIhxmFPvEcbDcPoyjnkcjuxNiiXD1FY/view?usp=sharing

Из beging.Учитель сказал, что все, что мне нужно сделать, это любой терминал, чтобы запустить это.Что ж, получается, что мне пришлось научиться запускать скрипты из cmd после 2 часов борьбы и попыток запустить этот AgeGender.py.Конечно, в начале не было никакого способа запустить python.exe из командной строки Windows, поэтому мне пришлось найти способ поместить все файлы в папку сценариев pycharm ТОЛЬКО, чтобы выяснить, что скрипт написан неправильно и что мне нужно найтиспособ исправить это ...

import cv2 as cv
import math
import time
import argparse

def getFaceBox(net, frame, conf_threshold=0.7):
    frameOpencvDnn = frame.copy()
    frameHeight = frameOpencvDnn.shape[0]
    frameWidth = frameOpencvDnn.shape[1]
    blob = cv.dnn.blobFromImage(frameOpencvDnn, 1.0, (300, 300), [104, 
117, 123], True, False)

net.setInput(blob)
detections = net.forward()
bboxes = []
for i in range(detections.shape[2]):
    confidence = detections[0, 0, i, 2]
    if confidence > conf_threshold:
        x1 = int(detections[0, 0, i, 4] * frameWidth)
        y1 = int(detections[0, 0, i, 4] * frameHeight)
        x2 = int(detections[0, 0, i, 5] * frameWidth)
        y2 = int(detections[0, 0, i, 6] * frameHeight)
        bboxes.append([x1, y1, x2, y2])
        cv.rectangle(frameOpencvDnn, (x1, y1), (x2, y2), (0, 255, 0), 
int(round(frameHeight/150)), 8)
return frameOpencvDnn, bboxes


parser = argparse.ArgumentParser(description='Use this script to run age             
and gender recognition using OpenCV.')
parser.add_argument('--input', help='Path to input image or video file.         
Skip this argument to capture frames from a camera.')

args = parser.parse_args()

faceProto = "opencv_face_detector.pbtxt"
faceModel = "opencv_face_detector_uint8.pb"

ageProto = "age_deploy.prototxt"
ageModel = "age_net.caffemodel"

genderProto = "gender_deploy.prototxt"
genderModel = "gender_net.caffemodel"

MODEL_MEAN_VALUES = (78.4263377603, 87.7689143744, 114.895847746)
ageList = ['(0-2)', '(4-6)', '(8-12)', '(15-20)', '(25-32)', '(38-43)', '(48-53)', '(60-100)']
genderList = ['Male', 'Female']

ageNet = cv.dnn.readNet(ageModel, ageProto)
genderNet = cv.dnn.readNet(genderModel, genderProto)
faceNet = cv.dnn.readNet(faceModel, faceProto)

cap = cv.VideoCapture(args.input if args.input else 0)
padding = 20
while cv.waitKey(1) < 0:
# Read frame
t = time.time()
hasFrame, frame = cap.read()
if not hasFrame:
    cv.waitKey()
    break

frameFace, bboxes = getFaceBox(faceNet, frame)
if not bboxes:
    print("No face Detected, Checking next frame")
    continue

for bbox in bboxes:
    # print(bbox)
    face = frame[max(0,bbox[1]-        
padding):min(bbox[3]+padding,frame.shape[0]-1),max(0,bbox[0]-    
padding):min(bbox[2]+padding, frame.shape[1]-1)]

    blob = cv.dnn.blobFromImage(face, 1.0, (227, 227), MODEL_MEAN_VALUES, 
swapRB=False)
    genderNet.setInput(blob)
    genderPreds = genderNet.forward()
    gender = genderList[genderPreds[0].argmax()]
    # print("Gender Output : {}".format(genderPreds))
    print("Gender : {}, conf = {:.3f}".format(gender, 
genderPreds[0].max()))

    ageNet.setInput(blob)

Итак, кто-то может сказать мне, как это исправить?пожалуйста

Traceback (most recent call last):
  File ".\AgeGender.py", line 47, in <module>
    ageNet = cv.dnn.readNet(ageModel, ageProto)
cv2.error: OpenCV(4.1.0) C:\projects\opencv- 
python\opencv\modules\dnn\src\caffe\caffe_io.cpp:1132: error: 
(-2:Unspecified error) FAILED: fs.is_open(). Can't open 
"age_net.caffemodel" in function 'cv::dnn::ReadProtoFromBinaryFile'

Я просто хочу, чтобы скрипт работал нормально без каких-либо ошибок, чтобы я мог закончить этот кошмар

1 Ответ

0 голосов
/ 30 мая 2019

Оказывается, сервер был перегружен, поэтому загруженные файлы не были завершены. После того, как я скачал пакет «FULL», все стало работать. Мне не хватало буквально 1 МБ 1 файла, что, к сожалению, было крайне важно для правильной работы всего сценария.

Спасибо за помощь и извините за проблему.

...