<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          OpenVINO + OpenCV實(shí)現(xiàn)點(diǎn)頭與搖頭識(shí)別驗(yàn)證

          共 9259字,需瀏覽 19分鐘

           ·

          2021-06-13 14:08

          點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)

          本文轉(zhuǎn)自:opencv學(xué)堂


          模型介紹


          OpenVINO支持頭部姿態(tài)評(píng)估模型,預(yù)訓(xùn)練模型為:head-pose-estimation-adas-0001,在三個(gè)維度方向?qū)崿F(xiàn)頭部動(dòng)作識(shí)別,它們分別是:

          pitch是俯仰角,是“點(diǎn)頭“yaw是偏航角,是‘搖頭’roll是旋轉(zhuǎn)角,是“翻滾

          它們的角度范圍分別為:


          YAW [-90,90], PITCH [-70,70], ROLL [-70,70]

          這三個(gè)專業(yè)詞匯其實(shí)是來自無人機(jī)與航空領(lǐng)域,計(jì)算機(jī)視覺科學(xué)家一大愛好就是搞新詞,就把它們借用到頭部姿態(tài)評(píng)估中,它們的意思圖示如下:

          對(duì)應(yīng)到頭部姿態(tài)評(píng)估中

          輸入格式:[1x3x60x60] BGR順序

          輸出格式:

          name: "angle_y_fc", shape: [1, 1] - Estimatedname: "angle_p_fc", shape: [1, 1] - Estimated pitchname: "angle_r_fc", shape: [1, 1] - Estimated roll


          人臉檢測(cè)


          基于OpenVINO中MobileNetv2 SSD人臉檢測(cè)模型,實(shí)現(xiàn)人臉檢測(cè),然后得到ROI區(qū)域,基于ROI實(shí)現(xiàn)頭部姿態(tài)評(píng)估,完成頭部動(dòng)作識(shí)別,這里只會(huì)識(shí)別幅度超過正負(fù)20度以上的頭部動(dòng)作。實(shí)現(xiàn)模型加載與輸入輸出格式解析的代碼如下:

           1ie = IECore()
          2for device in ie.available_devices:
          3    print(device)
          4
          5net = ie.read_network(model=model_xml, weights=model_bin)
          6input_blob = next(iter(net.input_info))
          7out_blob = next(iter(net.outputs))
          8
          9n, c, h, w = net.input_info[input_blob].input_data.shape
          10print(n, c, h, w)
          11
          12# cap = cv.VideoCapture("D:/images/video/Boogie_Up.mp4")
          13cap = cv.VideoCapture("D:/images/video/example_dsh.mp4")
          14# cap = cv.VideoCapture(0)
          15exec_net = ie.load_network(network=net, device_name="CPU")
          16
          17em_net = ie.read_network(model=em_xml, weights=em_bin)
          18em_input_blob = next(iter(em_net.input_info))
          19em_it = iter(em_net.outputs)
          20em_out_blob1 = next(em_it)  # angle_y_fc
          21em_out_blob2 = next(em_it)  # angle_p_fc
          22em_out_blob3 = next(em_it)  # angle_r_fc
          23print(em_out_blob1, em_out_blob2, em_out_blob3)
          24en, ec, eh, ew = em_net.input_info[em_input_blob].input_data.shape
          25print(en, ec, eh, ew)
          26
          27em_exec_net = ie.load_network(network=em_net, device_name="CPU"


          實(shí)現(xiàn)頭部動(dòng)作檢測(cè)


          解析模型的輸出,對(duì)視頻流實(shí)現(xiàn)人臉檢測(cè)與頭部動(dòng)作識(shí)別的代碼如下:

           1height = cap.get(cv.CAP_PROP_FRAME_HEIGHT)
          2width = cap.get(cv.CAP_PROP_FRAME_WIDTH)
          3count = cap.get(cv.CAP_PROP_FRAME_COUNT)
          4fps = cap.get(cv.CAP_PROP_FPS)
          5out = cv.VideoWriter("D:/test.mp4", cv.VideoWriter_fourcc('D''I''V''X'), 15, (np.int(width), np.int(height)),
          6                     True)
          7while True:
          8    ret, frame = cap.read()
          9    if ret is not True:
          10        break
          11    image = cv.resize(frame, (w, h))
          12    image = image.transpose(201)
          13    inf_start = time.time()
          14    res = exec_net.infer(inputs={input_blob: [image]})
          15    inf_end = time.time() - inf_start
          16    # print("infer time(ms):%.3f"%(inf_end*1000))
          17    ih, iw, ic = frame.shape
          18    res = res[out_blob]
          19    for obj in res[0][0]:
          20        if obj[2] > 0.75:
          21            xmin = int(obj[3] * iw)-10
          22            ymin = int(obj[4] * ih)-10
          23            xmax = int(obj[5] * iw)+10
          24            ymax = int(obj[6] * ih)+10
          25            if xmin < 0:
          26                xmin = 0
          27            if ymin < 0:
          28                ymin = 0
          29            if xmax >= iw:
          30                xmax = iw - 1
          31            if ymax >= ih:
          32                ymax = ih - 1
          33            roi = frame[ymin:ymax, xmin:xmax, :]
          34            roi_img = cv.resize(roi, (ew, eh))
          35            roi_img = roi_img.transpose(201)
          36            em_res = em_exec_net.infer(inputs={em_input_blob: [roi_img]})
          37            angle_p_fc = em_res[em_out_blob1][0][0]
          38            angle_r_fc = em_res[em_out_blob2][0][0]
          39            angle_y_fc = em_res[em_out_blob3][0][0]
          40            postxt = ""
          41            if angle_p_fc > 10 or angle_p_fc < -10:
          42                postxt += "pitch, "
          43            if angle_y_fc > 10 or angle_y_fc < -10:
          44                postxt += "yaw, "
          45            if angle_r_fc > 10 or angle_r_fc < -10:
          46                postxt += "roll, "
          47
          48            cv.putText(frame, postxt, (xmin, ymin-10), cv.FONT_HERSHEY_SIMPLEX, 1.0, (00255), 2)
          49            cv.rectangle(frame, (xmin, ymin), (xmax, ymax), (0255255), 28)
          50            cv.putText(frame, "infer time(ms): %.3f" % (inf_end * 1000), (5050), cv.FONT_HERSHEY_SIMPLEX, 1.0,
          51                       (2550255),
          52                       28)
          53    cv.imshow("Face & head pose demo", frame)
          54    out.write(frame)
          55    c = cv.waitKey(1)
          56    if c == 27:
          57        break
          58cv.waitKey(0)
          59out.release()
          60cap.release()


          運(yùn)行結(jié)果如下:


          視頻文件

          這個(gè)建議感興趣的可以嘗試一下,把視頻文件換成攝像頭,基本上實(shí)時(shí)識(shí)別點(diǎn)頭,搖頭,轉(zhuǎn)頭等動(dòng)作毫無壓力,我自所以不用我自己的測(cè)試截圖,主要把我自己長(zhǎng)的太丑!另外速度實(shí)時(shí)!真的好用!


          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目即可下載包括圖像分割、口罩檢測(cè)、車道線檢測(cè)、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。

          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


          瀏覽 76
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品男人操女人 | 日本一级A片亲子乱 | 91成人久久 | 国产久久久久久久久久久 | 99er这里只有精品 |