Как передать изображение захвата непосредственно в виде двоичных данных для обработки в вызовах API (Microsoft Cognitive Services) с использованием Python - PullRequest
0 голосов
/ 15 ноября 2018

Я использую когнитивные сервисы Microsoft для распознавания лиц и эмоций на языке Python.Теперь сначала я снимаю изображение с веб-камеры, используя opencv, и сохраняю это изображение в папке, а в пост-запросе API я передаю адрес изображения для обработки, затем получаю желаемый результат.Теперь я хочу сэкономить время обработки и хочу захватить изображение с камеры и отправить непосредственно на обработку без сохранения.Как я могу сделать это с помощью Python?Пожалуйста, помогите мне, я новичок в области программирования.

Вот мой код:

while(True):
    ret,img=cam.read()
    faces=faceDetect.detectMultiScale(img,1.3,5)

    for(x,y,w,h) in faces:
        sampleNumber=sampleNumber+1
        cv2.imwrite("dataSet/User."+str(id)+"."+str(sampleNumber)+".jpg",img)
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)
        cv2.waitKey(10)
    cv2.imshow("Face",img)

    img_filename = "C:/Users/Robot 2/Desktop/codes_msc/dataSet/User."+str(id)+"."+str(sampleNumber)+".jpg"
with open(img_filename, 'rb') as f:
    img_data = f.read()
    header = 
    {
    # Request headers for detection
    'Content-Type': 'application/octet-stream',
    'Ocp-Apim-Subscription-Key': subscription_key
     }



  r = requests.post(api_url,
                  params=params,
                  headers=header,
                  data=img_data)
  #Here i don't want to pass img_data as an address i just want to pass image captured 

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете закодировать изображение в памяти с помощью cv.imencode и отправить его в API.Это будет выглядеть примерно так:

ret,buf = cv.imencode('.jpg', img)

headers = {
    'Content-Type':'application/octet-stream',
    'Ocp-Apim-Subscription-Key':subscription_key }

api_url = 'https://westus.api.cognitive.microsoft.com/face/v1.0/detect'

params = {
    'returnFaceLandmarks':True, 
    'returnFaceAttributes':'emotion,age,gender' }

r = requests.post(api_url,
    params=params,
    headers=headers,
    data=buf.tobytes())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...