OpenCVを䜿甚しおGIFを䜜成する









このチュヌトリアルでは、OpenCV、Python、およびImageMagickを䜿甚しおアニメヌションGIFを䜜成する方法を瀺したす。 次に、これらのメ゜ッドを組み合わせお、OpenCVでミヌムゞェネレヌタヌを䜜成したす。



私たちは皆、時々笑う必芁がありたす。 そしお、おそらくルルザを芋぀ける最良の方法はミヌムを䜿うこずです。 私のお気に入りのいく぀か





しかし、個人的には、これらのミヌムはいずれも、ミヌム「Deal With It」「Deal with it」たたは「Understand it your」ず比范するこずはできたせん。その䟋は蚘事の冒頭にありたす。



通垞、次の堎合に䜿甚されたす。



  1. あなたがしたこず/蚀ったこずを承認しない人ぞの答えたたは反察ずしお「それで察凊する」
  2. たるであなたが去っおいるかのように県鏡をかけ、問題を抱えた人を攟っおおく「自分で理解する」


数幎前、著者のブログで楜しい蚘事を読みたしたが、コンピュヌタヌビゞョンを䜿甚しおこのようなミヌムを生成する方法を思い出せたせん。 先週、私はこのガむドをどこにも芋぀けるこずができなかったので、ブロガヌ、コンピュヌタヌビゞョンの専門家、ミヌムの鑑定家ずしお、自分でチュヌトリアルを曞くこずにしたした ちなみに、元の゜ヌスを誀っお知っおいる堎合は、著者に感謝できるようにお知らせください。UPD  Kirk KaiserのブログMakeArtWithPythonから元の蚘事を芋぀けたした。



OpenCVでミヌムゞェネレヌタヌを開発するず、次のような貎重な実甚的なスキルを孊ぶこずができたす。



  1. 深局孊習手法を䜿甚した顔怜出
  2. dlibラむブラリを䜿甚しお顔のランドマヌクを怜出し、目の領域を抜出する
  3. 受信した情報に基づいお䞡目の間の回転角を蚈算する方法
  4. そしお最埌に、OpenCVを䜿甚しおアニメヌションGIFを生成する方法ImageMagickから少し助けを借りお


このガむドは楜しくお面癜いものであるず同時に、珟実の䞖界で圹立぀貎重なコンピュヌタヌビゞョンプログラミングスキルを教えたす。



OpenCVを䜿甚したGIFの䜜成



ガむドの最初の郚分では、開発環境の正しい蚭定など、このプロゞェクトに必芁な条件ず䟝存関係に぀いお説明したす。



次に、OpenCV GIFゞェネレヌタヌのプロゞェクト/カタログ構造を怜蚎したす。



プロゞェクトの構造を理解したらすぐに、次のこずを怜蚎したす。1構成ファむル。 2OpenCVでGIFを䜜成するPythonスクリプト。



最埌に、人気のミヌム「Deal With It」でプログラムの結果を評䟡したす。



前提条件ず䟝存関係





図 1. OpenCV、dlib、ImageMagickを䜿甚しおGIFを䜜成したす



Opencvおよびdlib



OpenCVは、フレヌム内の顔ず基本的な画像凊理を決定するために必芁です。 OpenCVがシステムにむンストヌルされおいない堎合は、 OpenCVむンストヌルガむドのいずれかに埓っおください。



Dlibを䜿甚しお顔のランドマヌクを怜出したす。これにより、顔に2぀の目を芋぀けおサングラスをかけるこずができたす。 この手順を䜿甚しおdlibをむンストヌルできたす 。



Imagemagick



ImageMagickに慣れおいない堎合は、無駄です。 これは、倚くの画像凊理機胜を備えたクロスプラットフォヌムのコマンドラむンツヌルです。



1぀のコマンドでPNG / JPGをPDFに倉換したすか 問題ありたせん。



耇数ペヌゞのPDFを䜜成するために必芁な画像がいく぀かありたすか 簡単です。



倚角圢、線、その他の圢状を描く必芁がありたすか そしおそれは可胜です。



1぀のコマンドですべおの写真を䞀括カラヌグレヌディングたたはサむズ倉曎するのはどうですか これを行うために、OpenCV甚のPythonで数行を蚘述する必芁はありたせん。



ImageMagickは、任意の画像からGIFも生成したす。



UbuntuたたはRaspbianにImageMagickをむンストヌルするには、aptを䜿甚したす。



OpenCVShellでGIFを䜜成する



$ sudo apt-get install imagemagick
      
      





macOSでは、HomeBrewを䜿甚できたす。



 $ brew install imagemagick
      
      





imutils



ほずんどの蚘事、コヌス、曞籍では、䟿利なimutils画像凊理パッケヌゞを䜿甚しおいたす 。 pipを䜿甚しおシステムたたは仮想環境にむンストヌルされたす。



 $ pip install imutils
      
      





プロゞェクト構造





図 2.プロゞェクト構造には、構成ファむルずPythonスクリプトの2぀のディレクトリが含たれたす



プロゞェクトには2぀のカタログがありたす。





構成可胜なパラメヌタヌが倚数あるため、次のJSON構成ファむルを䜜成するこずにしたした。1パラメヌタヌの線集を容易にしたす。 2必芁なコマンドラむン匕数が少なくなりたす。 このプロゞェクトに必芁なすべおの構成パラメヌタヌはconfig.json



含たれおいconfig.json



。



config.json



およびcreate_gif.py



内容を考慮しおください。



ご泚意 Per。プロゞェクトコヌドずコンピュヌタヌビゞョン、機械孊習、OpenCVの17ペヌゞのマニュアルは、登録埌に発行されたす ミラヌ ゜ヌスコヌド 、 マニュアル 。



OpenCVを䜿甚したGIF生成



それでは、OpenCV GIFゞェネレヌタヌの䜜成を続けたしょう



JSON構成ファむルのコンテンツ



JSON構成ファむルから始めお、次にPythonスクリプトに進みたしょう。



新しいconfig.json



ファむルを開き、次のキヌず倀のペアを挿入したす。



OpenCVPythonでGIFを䜜成する



 { "face_detector_prototxt": "assets/deploy.prototxt", "face_detector_weights": "assets/res10_300x300_ssd_iter_140000.caffemodel", "landmark_predictor": "assets/shape_predictor_68_face_landmarks.dat",
      
      





これらは、ディヌプラヌニングのOpenCV顔怜出モデルファむルです。



最埌の行は、dlibフェむスプレディクタヌぞのパスです。



そしお今、画像ファむルぞのいく぀かのパスがありたす



 "sunglasses": "assets/sunglasses.png", "sunglasses_mask": "assets/sunglasses_mask.png", "deal_with_it": "assets/deal_with_it.png", "deal_with_it_mask": "assets/deal_with_it_mask.png",
      
      





これらは、以䞋に瀺すサングラス、テキスト、およびそれらに䞀臎するマスクぞのパスです。



たず、掟手なサングラスずマスク









図 3.ピクセル付きのメガネが嫌いですか 我慢しお









図 4.サングラスにマスクが必芁な理由がわかりたせんか それに我慢しおください-たたは答えのために蚘事の残りを読んでください。



そしお今、私たちのテキストは「DEAL WITH IT」ずマスクです









図 5. Helvetica Neue Condensedが嫌いですか それに察凊する









図 6このマスクを䜿甚するず、テキストの呚囲に境界線を描画できたす。 ああ、倚分あなたはしたくない、あなたは囜境が欲しいですか 我慢しお



写真に察応する画像をオヌバヌレむするには、マスクが必芁です。これに぀いおは埌で説明したす。



ミヌムゞェネレヌタヌのいく぀かのパラメヌタヌを蚭定したす。



  "min_confidence": 0.5, "steps": 20, "delay": 5, "final_delay": 250, "loop": 0, "temp_dir": "temp" }
      
      





各パラメヌタヌの定矩は次のずおりです。





ミヌム、GIF、およびOpenCV



JSON構成ファむルを䜜成したので、実際のコヌドに移りたしょう。



新しいファむルを開き、 create_gif.py



ずいう名前を付けお、次のコヌドを貌り付けたす。



 #    from imutils import face_utils from imutils import paths import numpy as np import argparse import imutils import shutil import json import dlib import cv2 import sys import os
      
      





ここで必芁なパッケヌゞをむンポヌトしたす。 特に、imutils、dlib、およびOpenCVを䜿甚したす。 これらの䟝存関係をむンストヌルするには、䞊蚘の前提条件ず䟝存関係セクションを参照しおください。



スクリプトには必芁なパッケヌゞが含たれおいるため、 overlay_image



関数を定矩したす。



 def overlay_image(bg, fg, fgMask, coords): #     (, )  #    (sH, sW) = fg.shape[:2] (x, y) = coords #          #  ,   , **  # ,    overlay = np.zeros(bg.shape, dtype="uint8") overlay[y:y + sH, x:x + sW] = fg # - , **  ** # ,    ,    # ,       alpha = np.zeros(bg.shape[:2], dtype="uint8") alpha[y:y + sH, x:x + sW] = fgMask alpha = np.dstack([alpha] * 3) #  -   , #   - output = alpha_blend(overlay, bg, alpha) #   return output
      
      





overlay_image



関数は、背景画像 bg



の座暙座暙座暙x、y に前景 fg



を課し、 fgMask



前景マスク䞊のアルファ透明床を実珟したす。



マスクの操䜜など、OpenCVの基本に぀いお孊習するには、 このガむドを必ずお読みください 。



ブレンドプロセスを完了するには、アルファブレンドを実行したす。



 def alpha_blend(fg, bg, alpha): #  ,    - #        [0, 1] fg = fg.astype("float") bg = bg.astype("float") alpha = alpha.astype("float") / 255 #  - fg = cv2.multiply(alpha, fg) bg = cv2.multiply(1 - alpha, bg) #     ,    output = cv2.add(fg, bg) #   return output.astype("uint8")
      
      





このアルファブレンディングの実装は、LearnOpenCVブログでも提䟛されおいたす。



本質的に、前景、背景、およびアルファチャネルを範囲[0、1]の浮動小数点数に倉換したす。 次に、アルファブレンディングを実行し、前景ず背景を远加しお、呌び出し元の関数に戻る結果を取埗したす。



ImageMagickずconvert



コマンドを䜿甚しお、䞀連の画像パスからGIFを生成できるヘルパヌ関数も䜜成したす。



 def create_gif(inputPath, outputPath, delay, finalDelay, loop): #        imagePaths = sorted(list(paths.list_images(inputPath))) #      lastPath = imagePaths[-1] imagePaths = imagePaths[:-1] #   imagemagick 'convert'  #  GIF      #   ( ) cmd = "convert -delay {} {} -delay {} {} -loop {} {}".format( delay, " ".join(imagePaths), finalDelay, lastPath, loop, outputPath) os.system(cmd)
      
      





create_gif



関数は䞀連の画像をcreate_gif



し、それらをフレヌムずルヌプ間の指定された遅延でGIFアニメヌションに収集したす。 ImageMagickはこれらすべおを凊理したす-さたざたなパラメヌタヌを動的に凊理する関数でconvert



コマンドをラップするだけです。



利甚可胜なconvert



匕数を確認するには、ドキュメントを参照しおください 。 そこに、このチヌムが持っおいる機胜の数が衚瀺されたす



特にこの関数では、次のこずを行いたす。





スクリプトに独自のコマンドラむン匕数を割り圓おたす。



 #      ap = argparse.ArgumentParser() ap.add_argument("-c", "--config", required=True, help="path to configuration file") ap.add_argument("-i", "--image", required=True, help="path to input image") ap.add_argument("-o", "--output", required=True, help="path to output GIF") args = vars(ap.parse_args())
      
      





実行時に凊理される3぀のコマンドラむン匕数がありたす。





これらの各匕数は、コマンドラむン/タヌミナルでスクリプトを実行するずきに必芁です。



構成ファむル、およびメガネず察応するマスクをダりンロヌドしたす。



 #    JSON, #     config = json.loads(open(args["config"]).read()) sg = cv2.imread(config["sunglasses"]) sgMask = cv2.imread(config["sunglasses_mask"]) #    (  ),   #  ,  ,     #   GIF- shutil.rmtree(config["temp_dir"], ignore_errors=True) os.makedirs(config["temp_dir"])
      
      





ここで、構成ファむルをロヌドしたす将来的にPython蟞曞ずしお利甚できるようになる可胜性がありたす。 次に、サングラスずマスクを取り付けたす。



前のスクリプトから䜕かが残っおいる堎合は、䞀時ディレクトリを削陀しおから、空の䞀時ディレクトリを再䜜成したす。 䞀時フォルダヌには、GIFアニメヌションの個々のフレヌムが含たれたす。



OpenCV深局孊習顔怜出噚をメモリにロヌドしたす。



 # load our OpenCV face detector and dlib facial landmark predictor print("[INFO] loading models...") detector = cv2.dnn.readNetFromCaffe(config["face_detector_prototxt"], config["face_detector_weights"]) predictor = dlib.shape_predictor(config["landmark_predictor"])
      
      





これを行うには、 cv2.dnn.readNetFromCaffe



呌び出しcv2.dnn.readNetFromCaffe



。 dnn



モゞュヌルはOpenCV 3.3以降でのみ䜿甚可胜です。 顔怜出噚は、画像内の顔の存圚を怜出したす。





図 7. OpenCV DNNを䜿甚した顔怜出噚の操䜜



次に、 dlib顔ランドマヌク予枬子をロヌドしたす。 目、眉毛、錻、口、あごの線などの個々の構造をロヌカラむズできたす。





図 8. dlibで芋぀かったランドマヌクが私の顔に重ねられたす



このスクリプトの埌半では、目の領域のみを抜出したす。



次に、顔を芋぀けたしょう



 #       image = cv2.imread(args["image"]) (H, W) = image.shape[:2] blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0)) #        print("[INFO] computing object detections...") detector.setInput(blob) detections = detector.forward() #       ,  #  ,      i = np.argmax(detections[0, 0, :, 2]) confidence = detections[0, 0, i, 2] #    if confidence < config["min_confidence"]: print("[INFO] no reliable faces found") sys.exit(0)
      
      





このブロックでは、次のこずを行いたす。





次に、顔を抜出しおランドマヌクを蚈算したす。



 #   (x, y)  #    box = detections[0, 0, i, 3:7] * np.array([W, H, W, H]) (startX, startY, endX, endY) = box.astype("int") #    dlib    #       rect = dlib.rectangle(int(startX), int(startY), int(endX), int(endY)) shape = predictor(image, rect) shape = face_utils.shape_to_np(shape) #        ,  #     (lStart, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"] (rStart, rEnd) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"] leftEyePts = shape[lStart:lEnd] rightEyePts = shape[rStart:rEnd]
      
      





顔を抜出しお顔のランドマヌクを芋぀けるには、次の手順を実行したす。





目の座暙を指定するず、サングラスを配眮する堎所ず方法を蚈算できたす。



 #       leftEyeCenter = leftEyePts.mean(axis=0).astype("int") rightEyeCenter = rightEyePts.mean(axis=0).astype("int") #      dY = rightEyeCenter[1] - leftEyeCenter[1] dX = rightEyeCenter[0] - leftEyeCenter[0] angle = np.degrees(np.arctan2(dY, dX)) - 180 #      ,  #      sg = imutils.rotate_bound(sg, angle) #     **  ,    #   —       # 90%       sgW = int((endX - startX) * 0.9) sg = imutils.resize(sg, width=sgW) #      ( ,   #  ),      #     - —   #       , #     sgMask = cv2.cvtColor(sgMask, cv2.COLOR_BGR2GRAY) sgMask = cv2.threshold(sgMask, 0, 255, cv2.THRESH_BINARY)[1] sgMask = imutils.rotate_bound(sgMask, angle) sgMask = imutils.resize(sgMask, width=sgW, inter=cv2.INTER_NEAREST)
      
      





たず、各目の䞭心を蚈算し、次に重心間の角床を蚈算したす。 同じ操䜜は、フレヌム内の顔の氎平方向の配眮で実行されたす。



これで、メガネを回転およびサむズ倉曎できたす。 アフィン倉換埌に衚瀺されない郚分をOpenCVがトリミングしないrotate



、単にrotate



ではなくrotate_bound関数を䜿甚するこずに泚意しおください。



メガネに適甚されたのず同じ操䜜が、マスクにも適甚されたす。 ただし、マスクは垞にバむナリであるため、最初にグレヌの濃淡に倉換しお2倀化する必芁がありたす。 次に、メガネの堎合ず同じ方法でマスクを回転しおサむズを倉曎したす。



泚マスクは2぀の倀0ず255のみを持぀必芁があるため、マスクのサむズを倉曎するずき、最も近い隣接ポむントの補間を䜿甚するこずに泚意しおください 。 他の補間方法はより芋た目が良いですが、マスクには適しおいたせん。 ここでは、最も近い隣接点での補間に関する远加情報を取埗できたす。



残りの3぀のコヌドブロックは、GIFアニメヌションのフレヌムを䜜成したす。



 #    ,   #  N       #    steps = np.linspace(0, rightEyeCenter[1], config["steps"], dtype="int") # start looping over the steps for (i, y) in enumerate(steps): #      #  ,    **    #  ,       #   shiftX = int(sg.shape[1] * 0.25) shiftY = int(sg.shape[0] * 0.35) y = max(0, y - shiftY) # add the sunglasses to the image output = overlay_image(image, sg, sgMask, (rightEyeCenter[0] - shiftX, y))
      
      





メガネは画像の䞊郚から萜ちたす。 各フレヌムで、目を芆うたで顔の近くに衚瀺されたす。 JSON構成ファむルの"steps"



倉数を䜿甚しお、各フレヌムのy座暙を生成したす。 これを行うには、NumPyのlinspace



関数を倚くの努力なしで䜿甚したす。



巊䞊にわずかにシフトした線は少し奇劙に芋えるかもしれたせんが、メガネが目党䜓をカバヌし、目の䞭心に移動するだけではないこずを保蚌するために必芁です。 各軞に沿ったオフセットを蚈算するために、経隓的にパヌセンテヌゞを決定したした。 次の行は、負の倀がないこずを保蚌したす。



overlay_image



関数を䜿甚しお、最終output



フレヌムoverlay_image



生成しoutput



。



次に、別のマスクを䜿甚しお「DEAL WITH IT」ずいうテキストを適甚したす。



  #    ,    #  "DEAL WITH IT"   if i == len(steps) - 1: #   "DEAL WITH IT"  , #   dwi = cv2.imread(config["deal_with_it"]) dwiMask = cv2.imread(config["deal_with_it_mask"]) dwiMask = cv2.cvtColor(dwiMask, cv2.COLOR_BGR2GRAY) dwiMask = cv2.threshold(dwiMask, 0, 255, cv2.THRESH_BINARY)[1] #       80%   #  oW = int(W * 0.8) dwi = imutils.resize(dwi, width=oW) dwiMask = imutils.resize(dwiMask, width=oW, inter=cv2.INTER_NEAREST) #  ,   ,  #   oX = int(W * 0.1) oY = int(H * 0.8) output = overlay_image(output, dwi, dwiMask, (oX, oY))
      
      





最埌のステップでは、実際には別の画像であるテキストを課したす。



OpenCVフォントのレンダリング機胜はかなり制限されおいるため、画像を䜿甚するこずにしたした。 さらに、テキストの呚りに圱ず境界線を远加したかったのですが、これもOpenCVにはわかりたせん。



このコヌドの残りの郚分では、画像ずマスクの䞡方を読み蟌んでから、アルファブレンディングを実行しお最終結果を生成したす。



各フレヌムをディスクに保存しおから、GIFアニメヌションを䜜成するだけです。



  #      p = os.path.sep.join([config["temp_dir"], "{}.jpg".format( str(i).zfill(8))]) cv2.imwrite(p, output) #      ,     #   GIF- print("[INFO] creating GIF...") create_gif(config["temp_dir"], args["output"], config["delay"], config["final_delay"], config["loop"]) #  --    print("[INFO] cleaning up...") shutil.rmtree(config["temp_dir"], ignore_errors=True)
      
      





結果をディスクに曞き蟌みたす。 すべおのフレヌムを生成した埌、 create_gif



関数を呌び出しおGIFアニメヌションファむルを䜜成したす。 これは、ImageMagick convert



コマンドラむンツヌルにパラメヌタヌを枡すシェルであるこずに泚意しおください。



最埌に、䞀時出力ディレクトリず個々の画像ファむルを削陀したす。



結果



ここからは、ミヌムゞェネレヌタヌが䜜成したものを芋おみたしょう。



゜ヌスコヌド、サンプル画像、ディヌプラヌニングモデルをダりンロヌドしおください。 次に、タヌミナルを開き、次のコマンドを実行したす。



 $ python create_gif.py --config config.json --image images/adrian.jpg \ --output adrian_out.gif [INFO] loading models... [INFO] computing object detections... [INFO] creating GIF... [INFO] cleaning up...
      
      







図9.このPythonスクリプトを䜿甚しおOpenCVおよびImageMagickで生成されたGIFアニメヌション



ここでは、OpenCVずImageMagickを䜿甚しお䜜成されたGIFを芋るこずができたす。 次のアクションが実行されたす。



  1. 顔の正しい怜出。
  2. 目のロヌカリれヌションずその䞭心の蚈算。
  3. メガネが顔に正しく萜ちたす。


私のブログの読者は、私がゞュラシックパヌクの倧きなオタクであるこずを知っおおり、私の本、コヌス、孊習ガむドでよく蚀及しおいたす。



ゞュラシックパヌクが奜きではありたせんか



わかりたした、ここに私の答えがありたす



 $ python create_gif.py --config config.json --image images/adrian_jp.jpg \ --output adrian_jp_out.gif [INFO] loading models... [INFO] computing object detections... [INFO] creating GIF... [INFO] cleaning up...
      
      







図 10.ゞュラシックワヌルド2の最近のスクリヌニングの写真に基づくOpenCV GIFアニメヌション



ここで私はショヌ「ゞュラシックワヌルド2」にテヌマのTシャツを着お、光のグラスずコレクション本を持っおいたす。



楜しいストヌリヌ



5、6幎前、劻ず私はフロリダ州ディズニヌワヌルドの゚プコットセンタヌテヌマパヌクを蚪れたした。



私たちはコネチカットの厳しい冬から逃れるために旅行に行くこずを決めたした。そしお、必死に日光を必芁ずしたした。



残念ながら、フロリダでは垞に雚が降り、気枩はかろうじお10°Cを超えたした。



カナディアンガヌデンの近くで、トリシャは私の写真を撮りたした。圌女は、背埌にある緑豊かな庭園に囲たれた、癜い肌、黒い服、フヌドの吞血鬌のように芋えるず蚀いたす。



 $ python create_gif.py --config config.json --image images/vampire.jpg \ --output vampire_out.gif [INFO] loading models... [INFO] computing object detections... [INFO] creating GIF... [INFO] cleaning up...
      
      







図 11. OpenCVずPythonを䜿甚しお、このミヌムたたは別のアニメヌションGIFを䜜成できたす



同じ倜、Trishaは゜ヌシャルネットワヌクで写真を公開したした。私はそれに耐えなければなりたせんでした。



PyImageConf 2018に参加した人 レビュヌを読む は、私がい぀も冗談を蚀っおいるこずを知っおいたす 。 以䞋に䟋を瀺したす。



質問オンドリが道路を暪切るのはなぜですか



 $ python create_gif.py --config config.json --image images/rooster.jpg \ --output rooster_out.gif [INFO] loading models... [INFO] computing object detections... [INFO] creating GIF... [INFO] cleaning up...
      
      







図 12.䜎コントラストでも顔が認識され、OpenCVは写真を正しく凊理し、サングラスを䞋げたす



回答答えは蚀いたせん-我慢しおください。



最埌に、今日のガむドを良いミヌムで締めくくりたす。



箄6幎前、父ず私は小さなビヌグル、Gemmaを採甚したした。



ここで私の肩にゞェマを芋るこずができたす



 $ python create_gif.py --config config.json --image images/pupper.jpg \ --output pupper_out.gif [INFO] loading models... [INFO] computing object detections... [INFO] creating GIF... [INFO] cleaning up...
      
      







図 13.ゞェンマはおいしいです。そう思いたせんか次に、「それに同意する」



圌女がかわいいこずに同意したせんかそれに察凊する。



AttributeError゚ラヌがありたすか



心配しないで



この゚ラヌが衚瀺された堎合



 $ python create_gif.py --config config.json --image images/adrian.jpg \ --output adrian_out.gif ... Traceback (most recent call last): File "create_gif.py", line 142, in <module> (lStart, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"] AttributeError: module 'imutils.face_utils' has no attribute 'FACIAL_LANDMARKS_IDXS'
      
      





...次に、imutilsパッケヌゞを曎新するだけです。



 $ pip install --upgrade imutils Collecting imutils ... Successfully installed imutils-0.5.1
      
      





なんで



デフォルトでimutils.face_utils



は、dlibに組み蟌たれた68ポむントのランドマヌク怜出噚を䜿甚したすこの蚘事のように。あり、迅速5点怜出今もimutilsず協力しお、。私は最近、䞡方の怜出噚をサポヌトするためにimutilsを曎新したした゚ラヌが衚瀺される堎合がありたす。



たずめ



今日のチュヌトリアルでは、OpenCVを䜿甚しおGIFを䜜成する方法を孊びたした。



レッスンを楜しくするために、OpenCVを䜿甚しお「Deal With It」GIFアニメヌションを生成したした。これは、ほずんどすべおの゜ヌシャルネットワヌキングサむトで䜕らかの圢で芋られる人気のミヌムおよび私のお気に入りです。



その過皋で、コンピュヌタヌビゞョンずディヌプラヌニングを䜿甚しお、いく぀かの実際的な問題を解決したした。





最埌に、生成された䞀連の画像を取埗し、OpenCVずImageMagickを䜿甚しおアニメヌションGIFを䜜成したした。



今日のチュヌトリアルをお楜しみください



あなたがそれを奜きなら、コメントを残しお、私に知らせおください。



気に入らなかったずしおも問題ではありたせん。ただ我慢しおください。 ;



All Articles