OpenCV(4.1.1)在函数“cv::icvExtractPattern”中找不到起始编号(文件名):(摄像头\u流\u Url)

2024-10-03 00:24:24 发布

您现在位置:Python中文网/ 问答频道 /正文

>&燃气轮机;我的py脚本运行正常,但当我创建.py to.exe时,生成了以下错误。

OpenCV(4.1.1)C:\projects\OpenCV python\OpenCV\modules\videoio\src\cap_images.cpp:253:错误:(-5:错误参数)cap_images:在函数“cv::icvExtractPattern”中找不到起始编号:http://admin:admin@192.168.1.86/axis-cgi/mjpg/video.cgi

下面是我的py脚本及其生成。

import face_recognition
import cv2
import time
import requests
import json
from http.client import responses
from datetime import datetime 
from datetime import timedelta
import sys
from truepy import License
from getmac import get_mac_address as gma
import easygui



# global variables
ChangeLayoutTime = time.localtime()
IsApiCall = False
currentTime = datetime.now()
afterTime=datetime.now()
layout_duration=0


#import json file parameters here
with open('config.json', 'r') as f:
    distros_dict = json.load(f)
    XiboClient_id = distros_dict['client_id']
    XiboClient_secret=distros_dict["client_secret"]
    XiboUrl=distros_dict["url"]
    XiboDisplaygroup=distros_dict["displaygroup"]
    XiboLayoutId=distros_dict["layoutId"]
    IpCamStreamUrl=distros_dict["ipCamStreamUrl"]
    playerIpAddress=distros_dict["playerIpAddress"]

    print(IpCamStreamUrl)
    # print(xiboclient_id)
    # print(xiboclient_secret)
    # print(xibourl)
    # print(xibodisplaygroup)
    # print(xibolayoutid)
    # sys.exit()
    # url = "'"+XiboClient_id+"'"
    # print(url)




#check lic
def validateLicense():
    # Load the certificate
    with open('certificate.pem', 'rb') as f:
        certificate = f.read()

    # Load the license
    with open('license.lic', 'rb') as f:
        license = License.load(f, b'stech_lic_78324')
        # Verify the license; this will raise License.InvalidSignatureException if
        # the signature is incorrect
        license.verify(certificate)
        if license.data.extra != gma(ip=playerIpAddress):
            print(license.data.extra)
            print(gma(ip=playerIpAddress))
            # shutdown the application and notify user about invalid license
            easygui.msgbox("Your camera module license is invalid please contact to S-Tech team", title="Invalid License!")
            sys.exit()






def __draw_label(img, text, pos, bg_color):
    font_face = cv2.FONT_HERSHEY_SIMPLEX
    scale = .4
    color = (0, 0, 0)
    thickness = cv2.FILLED
    margin = 2
    txt_size = cv2.getTextSize(text, font_face, scale, thickness)

    end_x = pos[0] + txt_size[0][0] + margin
    end_y = pos[1] - txt_size[0][1] - margin

    cv2.rectangle(img, pos, (end_x, end_y), bg_color, thickness)
    cv2.putText(img, text, pos, font_face, scale, color, 1, cv2.LINE_AA)
# Get a reference to webcam #0 (the default one)
video_capture = cv2.VideoCapture(IpCamStreamUrl)
# video_capture = cv2.VideoCapture("http://192.168.1.20:8080/video")

# Initialize some variables
face_locations = []

while True:
    # Grab a single frame of video
    ret, frame = video_capture.read()

    if ret ==False:
        break
    # Resize frame of video to 1/4 size for faster face detection processing
    small_frame = cv2.resize(frame, (0,0),fx=1,fy=1,interpolation = cv2.INTER_AREA)

    # Find all the faces and face encodings in the current frame of video
    face_locations = face_recognition.face_locations(small_frame, model="hog")
    print(face_locations)
    if  face_locations is ():
        break
    if datetime.now().strftime("%S") == afterTime.strftime("%S"):
        IsApiCall=False
    # Display the results
    i=0
    genders=[]
    ages=()
    for top, right, bottom, left in face_locations:
        # Scale back up face locations since the frame we detected in was scaled to 1/4 size
        top *= 4
        right *= 4
        bottom *= 4
        left *= 4

        # Extract the region of the image that contains the face
        face_image = frame[top:bottom, left:right]
        height,width  = face_image.shape[:2]

        if width>144:
                image='face{}.jpg'.format(i)
                cv2.imwrite(image,face_image)
        if datetime.now().strftime("%S") == afterTime.strftime("%S"):
            IsApiCall=False


        # customization by basit for layout change digisign player
        if IsApiCall is False:
            #check License
            validateLicense()
            # Access Token api 
            url = "http://"+XiboUrl+"/api/authorize/access_token"
            data = {
                'client_id': XiboClient_id,
                'client_secret': XiboClient_secret,
                'grant_type': 'client_credentials'
            }
            response = requests.request("POST", url, data=data)
            obj=json.loads(response.text)
            temp = obj["access_token"]

            # Change layout Api
            url = "http://"+XiboUrl+"/api/displaygroup/"+XiboDisplaygroup+"/action/changeLayout?envelope=1"
            data = {
                'layoutId': XiboLayoutId,
                'changeMode': 'replace'
            }
            headers = {
                'Authorization': 'Bearer '+temp
            }
            response = requests.request("POST", url, headers=headers, data=data)
            print("Layout change = Success")
            IsApiCall = True 

            # Get layout duration api
            url = "http://"+XiboUrl+"/api/layout/status/"+XiboLayoutId+"?envelope=1"
            headers = {
            'Authorization': 'Bearer '+temp
            }
            response = requests.request("GET", url, headers=headers)
            objj=json.loads(response.text)
            temp1 = objj["data"]
            layout_duration=temp1["duration"]
            print("Current layout duration is " +str(layout_duration)+ " second")
            currentTime = datetime.now()
            afterTime = (datetime.now() + timedelta(seconds=layout_duration+10))
            print("Next layout change after "+afterTime.strftime("%H")+":"+afterTime.strftime("%M")+":"+afterTime.strftime("%S"))
        else:
            currentTime=(datetime.now())
            if (currentTime.strftime("%S") == afterTime.strftime("%S")):            
                IsApiCall = False

    #For Vedio display window
    cv2.namedWindow('Video', cv2.WINDOW_NORMAL)
    cv2.imshow('Video', frame)

    # Hit 'q' on the keyboard to quit!
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release handle to the webcam
video_capture.release()
cv2.destroyAllWindows()

Tags: theimporturldatadatetimeiflicensevideo