Python,OpenCV - ntuf/Tips GitHub Wiki

さてどうするか。ピクトグラムを自動生成する。python opencv の書籍を西図書館で受け取りで予約してみるから16:20LDもみてみたい。
python opencvのプログラムを調べてみる

様々な機能があるので、OpenCV-Python Tutorials
で調べてみるそもまま使えるのがあるかもしれない。python をインストールするにはanaconda miniconda?パッケージが把握できなくなるのかも。
「自分の開発しているコードが依存しているライブラリもわからなくなります。いざどこかにデプロイしよう、と思ってもAnacondaにはデフォルトで多くのライブラリがインストールされているのでどのライブラリに依存しているのかわからなくなります。」
minicondaで行こう。
python3.7をここからダウンロードhttps://conda.io/en/latest/miniconda.html

bash Miniconda3-latest-MacOSX-x86_64.sh
インストール完了。
bash再起動conda listでインストールを確認


pip install opencv-pythonでopencvをインストール

そういえば本当にpythonでいいんだっけ?どんなアプリにしたい?画像色々選ぶのでやっぱりパソコンの方がいいのか?それともアプリにするのか?swiftでOpenCVを使えるようにしたいのではないのか?裏方のツールだからPCのアプリでいい。macosアプリを売ることはできるのか?売らなくていい。自分が操作したいだけだからコンソールアプリか?それでいい。
画像を読み込ませるところまで行ったが動いているのかよくわからない実際にピクトグラム画像とかで試したらいいのだろうか。
「python opencv findContours」とかで検索
https://github.com/mrgloom/Face-Swap気になるがよくわからない
特徴点検出?http://ishidate.my.coocan.jp/opencv_11/opencv_11.htm
これがいいのかもしれない特徴点検出(Feature Detectorを使う)
こんなのもあるのかOpenCVで画像の特徴抽出・マッチングを行うhttp://whoopsidaisies.hatenablog.com/entry/2013/12/07/135810
その中で
特徴点を自動で抽出して、マッチングしてマッチング箇所を繋いでモーフィングのマーカーにする。できるの?だいぶ遠い気がする。もっと直接的なものはできないのか。opencvの顔認識とモーフィングをそのまま実行したらどうなる?
「「顔検出といえばOpenCV」というイメージだったので、とりあえず触ってみたのですが、真正面を向いている顔でないと検出精度がかなり低かったので、機械学習のC++、Pythonライブラリ「dlib」を使うことにしました。」とあるので、dlibも使ってみる?まずOpenCVだけでやってみて、制度が足らなければdlibも導入してみる。
OpenCVで平均顔を作るチュートリアル
https://medium.com/@NegativeMind/opencv%E3%81%A7%E5%B9%B3%E5%9D%87%E9%A1%94%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB-94c48a5cd1f8

これで平均画像を作ってしまえばいいのかもしれないでもこれもdlib使っている。
たいがいdlib使えばいいのかも
インストール方法がよくわからないがpip install dlibかな?
たはよく読んでいないエラーがでた
CMake must be installed to build the following extensions: dlib
以下で解決https://qiita.com/Uejun/items/54492ed9317d3a79f517
brew install cmake
インストール成功再度dlib入れてみる成功
https://github.com/pokohide/wanna_be_beanでとりあえず落として動かせるか試すか

./shape_predictor_68_face_landmarks.datがないと怒られたダウンロードして配置。なんか動いたっぽい22:00〜25:00
2/26 14:00から画像ができていないなと思ったら、出力用のフォルダがないためでした。〜14:30
障害者ピクトグラム、アイコダウンロードして動かしてみるが、マッチングしないので何も起こらない。特徴点検出を図像にできるようなのがあったような。
画像の特徴点を抽出するhttps://qiita.com/fukuit/items/546f19d2abf98eccd3e7
これも試してみて、
使えるところうまくマージすれば終わりではないか動作はmatplotlib(データ可視化)が必要pip install matplotlibでインストール
完了再度実行エラーエラー調べるhttps://qiita.com/Gen6/items/78d83d117ef67e0d53c2
エラーでイラベルトいっぱいでてくる
python -c "import matplotlib;print(matplotlib.matplotlib_fname()
で出力されるパスの#backend: macosxbackend: Tkaggと修正すればOKらしい(意味はわかっていない)
今度はまた別のエラーhttp://danglingfarpointer.hatenablog.com/entry/2016/01/21/235921

brewを使っているが、ずっとpipを使ってきたのでpipで行きたいところ。cmakeでbrewも使っているのか。どっちでもいいのか?pip install opencv-python
オプションつkればいいのか?pip install opencv-python —with-contrib —with-python3 やっぱりオプショnを認識できないのでbrewでオプション指定してopencvを入れ直す
brew install opencv3 —with-contrib —with-python3

あれ?オプションを認識しないまた調べてみるhttps://qiita.com/pakio/items/3862a4add3c4b4b7335fpip install opencv-contrib-python再実行また別のエラーerror: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function ‘create’

error: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function ‘create’

■pip install matplotlib

cmakeでコンパイルすればいいのか?

brew install opencv3 —HEAD
結局動かない
pip install opencv-contrib-python

https://mem-archive.com/2018/11/10/post-1129/
SIFTを使うには特許で保護されているので、普通には使えないらしい。SIFTって使う必要があるのか?ちょっとコメントして使えるかをみてみたが、ダメだった。

http://lang.sist.chukyo-u.ac.jp/classes/OpenCV/py_tutorials/py_feature2d/py_orb/py_orb.html
2011年の論文ORB: An efficient alternative to SIFT or SURF (SIFTやSURFに変わる効率的な手法)で提案された。この題目が示すように、計算コスト、マッチング性能、特に特許の点においてSIFTやSURFに代わる良い手法である。そう、SIFTもSURFも特許が取られており、これらを使う場合には使用料を払わなければならない。しかし、ORBはそうではない!!!

ORBを使うという手もあるみたいだが、、
AKAZEなら特許フリー。コメントだけで本当はいけるのでは?

AttributeError: module ‘cv2.cv2’ has no attribute ’drawKeypoints’で困る。全部入れ直し?alreadyになる。https://teratail.com/questions/170044
問題はopencv-contrib-pythoらしいのだが。(多分)キャッシュを消して再インストールpip —no-cache-dir install -I opencv-contrib-python

おんなじところでコケました。どうしよう。
アンインストールしてから再インストール?pip uninstall opencv-contrib-python
pip —no-cache-dir install -I opencv-contrib-python
再実行してもおんなじ。諦めるか?
全部そうするか?pip uninstall opencv-python
pip uninstall matplotlib
pip uninstall dlib
pip uninstall opencv-contrib-python

pip install opencv-pythonpip install matplotlibpip install dlibpip install opencv-contrib-python

やってみたがAttributeError: module ‘cv2.cv2’ has no attribute ’drawKeypoints’振り出しに戻った。
名前空間を整理した可能性は?https://ja.stackoverflow.com/questions/21773/python2%E3%81%AEopencv3%E3%81%A7%E3%82%A8%E3%83%A9%E3%83%BC
??
わからん理由ははっきりしないがdrawKeypointsってSIFTのメソッドなのかもしれない。AKAZAの特徴点検出では他のサイトではでてこないから。
https://qiita.com/bohemian916/items/4d3cf6506ec7d8f628f3
drawKeypointsのところをコメントにしたら動いたっぽい
ピクトグラムを例にして動かせた。ピックアップさsれた特徴量が少ない?まあいいやこれでデータをモーフィングマークにできる
特徴点をどう渡せばいいのかはわからない。できてるものはないのか?Githubhttps://github.com/topics/morphing?o=desc&s=forks
いかが良さげかも?garimachhikara128 / Morphing
https://github.com/garimachhikara128/Morphing
でやっぱりこれも「Facial」だったりする。
コードを読んで地道に修正をしてみるか?でも顔の特徴点であるところから修正が大きくなる。
まずこれを元にしたほうがいいかも
OpenCV + Pythonで特定の図形を検出する2(特徴量検出による図形の判定)https://symfoware.blog.fc2.com/blog-entry-2164.html

なんか調べたら以下がでてきた。↓ORBは、特徴点、特徴量を抽出するアルゴリズムで、移動、回転、ズームのどれにもロバストネスがあるアルゴリズムです。
もともとSIFTというアルゴリズムが、移動、回転に加えてズーム対するロバストネスを獲得しました。ただSIFTは計算量が多く、低速だったため、速度を改良したSURFというアルゴリズムがでてきました。ただし、SIFTもSURFも特許で守られているため、使用するためには特許料を払う必要があります。そこで、移動、回転、ズームの3つに対してロバストネスをもち、計算速度も速く、フリーで使うことができるORBというアルゴリズムが2011年に開発されました。またOpenCV 3.0からは、2013年に開発されたAKAZEというアルゴリズムがサポートされています。AKAZEは、計算量がORBよりもやや多いものの、低周波領域、高周波領域の抽出精度がORBよりも優れていて、ハイスピードカメラのトラッキングでその威力を発揮するとされています。AKAZEとORBの比較動画はこちら(youtube)。
とりあえず、以下を動くようにしてみるOpenCV + Pythonで特定の図形を検出する2(特徴量検出による図形の判定)https://symfoware.blog.fc2.com/blog-entry-2164.html
Mrビーンのやつを大人しく解読をする。

以下が使われている。dlib.get_frontal_face_detector()
self.detector()
これで戻り値にランドーマークとか入っているから。図形な場合だと、参考にならない。やっぱり以下を参考にしようOpenCV + Pythonで特定の図形を検出する2(特徴量検出による図形の判定)https://symfoware.blog.fc2.com/blog-entry-2164.htmlエラー発生ValueError: not enough values to unpack (expected 3, got 2)

ValueError: not enough values to unpack (expected 3, got 2)https://code-graffiti.com/opencv-contour-detection-in-python/(OpenCV4と使っている場合は、contours, hierarchy = cv2.findContours()の2つが返されると言う違いがあります)変更して無事に動いた。で、これで何ができたかというと。
特徴量を出しているのだけど、特徴点データでモーフィングに移りたいのだった。
以下が何をしているのか?sorted(matches, key=lambda x: x.distance)
https://qiita.com/n10432/items/e0315979286ea9121d57
リストをソートしているだけ。
drawMatchesで特徴点画像化。それはいい。
ビーンのコードではwarpAffineで画像をモーフィングしている。

transformation_from_points
回転をスケールを調整ここでMというのを返してwarpAffineの引数に使っている。
次調べること。・warpAffineに渡すMのクラスの型はなに?    numpy.vstackで何が帰ってくるかでわかる。     →数字っぽい・M[:2]ってどういうこと →配列二番目かな?
引数は 2×3の変換行列らしいです。→何?
MってmatrixのMですか。
ビーンのやつって、色とかを補正して画像を入れ替えてアフィン変換しているだけでモーフィングとはちょっと違うのでは?
他のも^フィン具は何をしようしているのかをみてみる。https://github.com/garimachhikara128/Morphing/blob/master/FaceMorph.py
これもアフィン変換だった。いいんじゃないか?
変換行列さえ渡せば変換ができる模様。

特徴点から回転やスケールを調整
というところで、平均や標準偏差を取得したり、特異分解したりしている。難しいが、これらは図形のモーフィングに必要なのだろうか?たのやつも同じことしているかをみてみる。
https://github.com/garimachhikara128/Morphing/blob/master/FaceMorph.py
だと、cv2.getAffineTransformというのをやっている
対応する3点の座標からアフィン変換を行う2x3行列を求める関数。
なんだとさ。

アフィン変換について学び始める?行列について学び始めると大変になってくる。
ビーンのやつはface swapping
なので、morphingをやらないとだめ。
ちょっと逸れるけど、画像のソフトでモーフィングができるなら、それを使えばいいかも。できるソフトはあるのかな?
illustratorのブレンド機能がある。http://blog.cgfm.jp/garyu/archives/1599
ブレンドの実体化もできる。https://ameblo.jp/kachio-san/entry-11088297049.html

なんかやる意味がなくなってきたような。それでも作るメリットをあげるなら。 ・自動化できる。 ・illustratorを買わなくてもすむ それぐらいこれ続ける?まあ意味はなくないが、やってみたい気もする。やりたいと思ったものは完成させたい。
で実現するには、顔の平均の算出triangulation(三角測量)でメッシュにする。が必要になる。
顔のモーフィングを続けていていいのだろうか。ブレンド blend で検索してみては?
アルファブレンド(半透明みたいな合成)だとやりたいことではない。元に戻って、顔のモーフィングを応用するでいいか。
やりたいのは、特徴点を三つ出して2*3の行列にすればいのか?でもやっぱり1からはきついな。https://github.com/mrgloom/Face-Swapでコードを探してみよう

参考になりそうなところImage Morphing – local (non-parametric) warphttp://alumni.media.mit.edu/~maov/classes/comp_photo_vision08f/lect/07_Image%20Morphing.pdf
https://github.com/t0nyren/piecewiseAffineC++https://github.com/liaojing/Image-Morphing/tree/master/codeC++
ただの図形をやっているようなものはないみたい。ちょっとないみたい。
顔をメッシュ化してやっていてpythonopencvで動くものをgithubから探してみる。https://github.com/alyssaq/face_morpher
とてもいい機能だが、自分が読むにはコードが長すぎる。
どうするか?やってみるか?

ーーー前回までーーー顔をメッシュ化してやっていてpythonopencvで動くものをgithubから探してみる。https://github.com/alyssaq/face_morpherとてもいい機能だが、自分が読むにはコードが長すぎる。どうするか?やってみるか?ーーーーーーーーOpenCV 4.じゃ動作しねえってよ。

他のを探す。ほとんどがC++みたいだ。
さっkのでやってみるか???opencv4? python4と勘違いしていた。
これでやるしかないか。複数のopencvを共存させることはできるか?複数バージョンのOpenCVを共存させたい on macOS
https://qiita.com/shinsumicco/items/5efde7e5dbdf0f8e2c43

共存のほうがリスクがたかそう、動かないところを自分で修正すればいいのではないのか?
とりあえず動かそう。と思ったが、どうやるって言ったら、結局顔検出してからの話になる。顔検出がライブラリを読んでいるから、それに変わる特徴点抽出が必要だったはず。なぜこの話になったのか?
アフィン変換を考えてみる。2*3の行列を与えればいいのかもしれないが、それは、他の角度からみた場合の変換が必要。triangurationが必要だから他のソースをみるかという話だった。
ここ参考になるだろうかhttp://myfuturesightforpast.blogspot.com/2014/09/delaunay-triangulation-by-python.html
特徴点を頂点とした三角分割を行うことでいいらしい。get_frontal_face_detectorで顔の輪郭など抽出できるけど、
グラフの輪郭をの特徴点抽出をどうやってやるのかという問題。
https://code-graffiti.com/opencv-contour-detection-in-python/
findContoursで行けるのか?
(思い出すのに時間がかかる。もっと早く思い出せる方法はないのか?)これを読み返せばいいのか?
2枚の絵を見比べて間違い探しをしてみようhttps://qiita.com/fukuit/items/817c5282fc1a78872dd1

これの中の、「matches」にマッチしている数値データが入っているのでは?これを元にtriangurationすればいいのでは?
課題はたくさんあるけど。 ・本当に配列が入っているのか ・どんな配列で、どんなデータであればできるのか? ・うまく合体できるの? ・python4でも動くようにできるのかやってみるか?まず、動かしてやってみよう。鬱でやった特徴点抽出があるので、それでやってみる。
error: (-215:Assertion failed) !_src.empty() in function ‘cvtColor’
エラーが発生元画像を移動させただけだった。画像を復活させたら動いた。〜16:50
夜22:30〜行列の本をパラパラめくる落合陽一のツイートをみてみる。
printを入れて動かしてみる。行列ではなさそうだ。どうしよう。どんなデータ形式が帰ってきているのか?
BFmatcher形式らしいがよくわからない。
やっぱり輪郭抽出なのか?OpenCV – findContours() による輪郭抽出
http://pynote.hatenablog.com/entry/opencv-findcontours
色々パラメータをチューニングすれば、輪郭を取得できるのだろうか。
よくわからない。どうしよう。頓挫。
闇雲に調査してみる。特徴点の座標を調べるみたいなのがあったからこっちから調べてみるOpenCVで特徴量の座標を取得
https://qiita.com/hayata-yamamoto/items/d4033e6652c8fe68698b

によるとmatchesに格納されているDMmatchというクラスには、四つのパブリックな属性値が存在しています。DMatch.distance – Distance between descriptors. The lower, the better it is.DMatch.trainIdx – Index of the descriptor in train descriptorsDMatch.queryIdx – Index of the descriptor in query descriptorsDMatch.imgIdx – Index of the train image.さらに、AKAZEのキーポイントには、座標情報が格納されているのでkp.pt → (y:float, x:float)をintにキャストすれば、画像配列中で座標を用いた操作をすることができるようになります。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10140821490
point.pt0がX座標point.pt1がY座標
座標は取れた。もっと特徴点を的確に捉えるには数字をどういじったらいいのか?
特徴量をまさに自動で取るのが自分でやりたかったこと。特徴量の取得の自動化こそがディープラーニングだったのか。わかる特徴ベクトル 特徴量抽出と機械学習
https://matome.naver.jp/odai/2145764227393421401

ちょっとまった機械学習を実装しないといけないの?それとも特徴量抽出に含まれているの?
これみる限りopencvと機械学習は別物、そりゃそうだ。機械学習のためのOpenCV入門

でも機械学習でなくともある程度特徴点抽出でなんとかならないものなのか?fig.pyとかみてもうちょっと調整をしてみる。
白黒反転しているので、それとか関係ある?関係なさそう?
閾値処理を入れたら?前より、角を捉えて特徴を抽出しているみたい。でも、少ない。
どうしよう。輪郭のfindContoursでどうとれるのか試してみる。findContoursの特徴点の座標なんかもとれるといい。
25:00
3/11(月)12:00〜13:30findContoursで何が帰ってくるか
hierarchyって何よ。輪郭での場合、結局マッチングしてない座標を取得できてもしょうがない。やっぱり、マッチングの精度をあげるしかない。
全く同じ画像だったら特徴量抽出はいっぱいできる?そんなに増えなかった。
matches[:10]
というのはソートしたので上位10個までの特徴点を表示するという意味だった。いじってみる。いっぱい特徴点が出てきたけど、間違いもいっぱいある。1000にしてさらにいっぱい出てきた。でもやっぱり間違いもあるので、問題がある。
illustratorのブレンド機能これどうやってやっているんだろう。http://blog.cgfm.jp/garyu/archives/1599
読み直すと、全自動化ではなくて、パーツごとにブレンドをユーザが作ってあげないといけない模様。
これを自動化したいわけだから、多少間違っていても、これらをtriangurationしてあげてなんとかモーションしてみるか?triangurationの処理をみてみるか。
これも参考になるかな?Delaunay triangulation by Pythonhttp://myfuturesightforpast.blogspot.com/2014/09/delaunay-triangulation-by-python.html

15:30〜triangulationにSubdiv2Dを使っていたり、matplotlibを使っていたり?何がいいのか?
ドロネー図ボロノイ図 細胞壁みたいな図どっちもモーフィングに使いそうだが、とりあえずドロネー図でいいみたい。Delaunay  Voronoi

warp_image
  delaunay = spatial.Delaunay(dest_points)
averagerからwarp_imageを読んでいる。第三引数dest_pointsはload_image_pointsの戻り値load_image_pointsのなかで、locator.face_points(img)を呼んでいる
points = stasm.search_single(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY))で顔のポイントを読み込んでいるらしいstasm.search_singleというので顔のポイントが読めているみたい。
多分座標の配列が入っていると思う。そう思いたい。
  delaunay = spatial.Delaunay(dest_points)
でやっている。これは「ドロネー三角形の座標リストを取得: scipy.spatial.Delaunay」らしい。サイピー?を使っている模様
次の行では、numpy.asarrayしているこれは配列のコピーらしい。  tri_affines = np.asarray(list(triangular_affine_matrices(    delaunay.simplices, src_points, dest_points)))triangular_affine_matricesというのは
アフィン行列変換をやっている模様以下関数の説明  Calculate the affine transformation matrix for each  triangle (x,y) vertex from dest_points to src_points  :param vertices: array of triplet indices to corners of triangle  :param src_points: array of [x, y] points to landmarks for source image  :param dest_points: array of [x, y] points to landmarks for destination image  :returns: 2 × 3 affine matrix transformation for a triangle
それぞれについてアフィン変換行列を計算する  dest_pointsからsrc_pointsへのtriangle(x、y)頂点  :param vertices:三角形の角への三重項インデックスの配列  :param src_points:[x、y]の配列がソース画像のランドマークを指す  :param dest_points:[x、y]の配列は、転送先イメージのランドマークを指します。  三角形の2×3アフィン行列変換
一つ目の引数に「delaunay.simplices」を突っ込んでいる。これは何?調べても出てこないが。まあそのまま使おう。問題はdest_pointsも(x,y)の座標配列みたいだし。問題なさそう。dest_pointsは
locator.weighted_average_pointsで取ってきている。
予定そのままのソースを動かせるようにしてから、AKAZEで取得したマッチング座標配列を全部渡してあげればいいのかな?

試しにやってみるか。どこがスタートかな?
docoptというモジュールがないと怒られました。
コマンドラインを制御したりするのがやりやすくなるらしい。インストールします。pip install docopt

今度はfacemorpherがないと怒られる。inportのfromを抜いてしまう。
今度はstasmがないと怒られるpip install stasm
以下のようなエラーが。Referenced from: /Users/ntuf/miniconda3/lib/python3.7/site-packages/_stasm.cpython-37m-darwin.so  Reason: image not found似たようなエラーを検索するhttps://qiita.com/hurutoriya/items/d162f9f50be6d2088630

よくエラーを読むとLibrary not loaded: /usr/local/opt/opencv/lib/libopencv_core.3.4.dylibでdylibの場所をさがしてシンボリックリンクを貼り直すらしい。
find / -name llibopencv_core.3.4.dylib
Permission deniedで見れないことが多い。
標準出力を以下繋げて出さないようにしたが2> /dev/nullllibopencv_core.3.4.dylibは存在しないようだ。

もしかしたら画像の問題だったらよくないので、jpgではなくpngを読むように変更してみるか。
python3 facemorpher/morpher.py -src=/Users/ntuf/Python/wanna_be_bean-master/beans/1.jpg —dest=/Users/ntuf/Python/wanna_be_bean-master/images/escape/007_spectre.jpg —plot
python3 facemorpher/morpher.py —src=/Users/ntuf/Python/face_morpher-master/facemorpher/zack.png —dest=/Users/ntuf/Python/face_morpher-master/facemorpher/iron.png —plot
結局やっぱり同じエラーLibrary not loaded: /usr/local/opt/opencv/lib/libopencv_core.3.4.dylib
どうしようか。このソースを使わないようにするか?opencvの3.4.5を入れろとの話だからまさにこのことか?同居させることはできるのかopencv4と3は
複数バージョンのOpenCVを共存させたい on macOS
https://qiita.com/shinsumicco/items/5efde7e5dbdf0f8e2c43
これみるに長いしそうとめんどそう。
opencvをアンインストールして。3.4.5を入れ直した方が早そう。でも最新で作りたいなー。
たの参考となるようなソースはないかface morph trinagulation python opencvで検索 
https://github.com/patirasam/Face-Morphing-DelaunayTriangulation

こっちを解析してみよう
実行したらエラーが発生
3/12(火) 4時間半弱21:30〜    print ‘Writing Frame’, 200 – int(percent*200) + 1                        ^SyntaxError: invalid syntax
printが構文だった時代で今は関数。だいぶ古いバージョン?//をコメントにしていたり。ModuleNotFoundError: No module named ’skimage’→pip install scikit-image
RuntimeError: Unable to open shape_predictor_68_face_landmarks.dat→dlibのインストールした場所に入れる必要があるっぽい書いてあるところがあったのに、 サンプルと一緒でいいらしい。
ModuleNotFoundError: No module named ‘vid_lib’
→pip install sk-video ?   import skvideo.ioを入れてみた。
    VID_FILE = sys.argv3IndexError: list index out of range→結果のビデヲファイルを出力先として指定。
今度は、RuntimeError: Unsupported image type, must be 8bit gray or RGB image.画像のタイプをサポートしていない模様。もっと違うものにしてみるか?ラリーペイジのpngにしてみたが違うようだ。というより例はjpgだからjpgにした方がいいみたいだ。動いた
  File “face_morph.py”, line 81, in     for i in xrange(0, len(src_points)):NameError: name ‘xrange’ is not defined
https://www.sejuku.net/blog/69291
なお、「python3系でxrange()が使を使おうとしたらエラーが出てしまった。」という問題を抱えておられる方、結論から申しますとpython3系ではxrange()を使う事はできません。
xrangeが削除されたためらしい。rangeに書き換えれば動くらしい。

  File “face_morph.py”, line 86, in     del_triangles = delaunay(avg_points)TypeError: delaunay() missing 1 required positional argument: ’src_img’引数が足りてないよということらしい。引数を調べる方法は?→よくわからない。とりあえずsrc_imgと言っているので、データを入れてみる?戻り値を何も使っていないのでとりあえずコメントにしてみる。
NameError: name ‘Video’ is not defined→videoは以下を参考にしてみるか。

とりあえず全部コメントにしておけばいいかな?
動画の作成部分http://lang.sist.chukyo-u.ac.jp/Classes/OpenCV/Notebook/video.html
を参考にカメラの撮影部分についてはコメントアウト
imshowにcv2つける
namedWindowをコメント
get_tupleでこけるので、コメントしていた部分を配列に入れ替えると動いた。

結局aviファイルできたけど、ひらけない。色々試行錯誤してtest.aviはできたのだが動かない。
delaunayの戻り値は結局何が必要なんだ?xyzだ。delaunayの戻り値となる、edge_setがうまく取れていない。

〜1:53
3/13(水)13:30-渡す引数はxyのリストで、渡されてくる必要な戻り値(次の引数に使われる)はxyzだから、get_edgesでzを付加しているのではという予想。
    edge_set = set()って何よ。point.incoming_edge
って何よ。
incoming_edge
でif文に入っていて、noneが入ったままなので処理がスキップされている模様。devideをコメントアウトを外すRecursionError: maximum recursion depth exceeded in comparison再起上限数に達してしまったらしい。divideの中をみてなんとか理解して修正できないかを考えたが、
これ以上は無理と判断。14:30
さてどうするか。他のを探そう。
https://github.com/chanddu/faceExperiments
はどうか。こんな短い2ソースだけでは動かないでしょう。
他にはhttps://github.com/andrewdcampbell/face-movie
face-movieムービーはいらないと思ったがAveraging Facesもできるらしいので行けるか?
Supported on Python 3 and OpenCV 3+. Tested on macOS High Sierra and Mojave.らしいし。
ダウンロード平均顔を実行させてみるpython face-movie/main.py -average -images /Users/ntuf/Python/face-movie-master/demos/face_dataset/female -out female.jpg
RuntimeError: Unable to open ./shape_predictor_68_face_landmarks.datdatをおく。動いた!!15:12
ソースを解析して修正をしてみる。どのように修正をするかというと★顔のモーフィングで取得した特徴量の配列に対して、★AKAZEで取得したマッチング座標配列を渡してあげればいいのだろうと思う。
ValueError: operands could not be broadcast together with shapes (830,6,3) (830,305,3) 
多分同じピクセルサイズの画像でないと処理できないのだと思う。画像サイズ変換サービスで変換https://www.image440.com/
できた!15:30
ちょっと休憩
16:00-では続けようか。ソースを読んでみる
//は切り捨て除算
顔のランドマークはdlib.get_frontal_face_detectorで取得している。
triangurationはどこだ? triangulation = Delaunay(average_landmarks).simplices
draw_triangulationをコメントアウトしているから、コメントを外すと線が描画されるか?
get_landmarksでxy配列情報を取得しているので、ここに
AKAZEを突っ込めばいいみたい。-16:38
LANDMARK_LISTは各画像のランドマークリスト
average_imagesの処理を見ていこう

配列の平均座標を出しているのがコメントでわかった。
triangulation = Delaunay(avg_landmarks).simplices
ドロネー三角形のどの点を結んで三角形としているかはsimplices属性で取得する。らしいhttps://note.nkmk.me/python-scipy-matplotlib-delaunay-voronoi/

simplicesの値はpointsの何番目の点かを示している。例えば[0 1 4]はpointsの0番目、1番目、4番目の点で三角形を構成していることを表している。らしい。
だから整数なんだね。
次はwarp_imを見ていこう。と思ったがなんとなくわかってきたので、AKAZEランドマークを渡すことを考える。
16:59(3:30h)
夜22:20-処理を挿入し、配列で呼び出すなど変更を加えている。画像ファイルを正方形に変換する。
苦心して配列操作して入れた。だが、エラーTraceback (most recent call last):  File “face-movie/main.py”, line 262, in     average_images(OUTPUT_NAME)  File “face-movie/main.py”, line 104, in average_images    avg_landmarks = sum(LANDMARK_LIST) / len(LANDMARK_LIST)ValueError: operands could not be broadcast together with shapes (65,2) (92,2) 
kp1,kp2から配列を求めるのではなくて、matchesから取り出さないといけない-24:30
3/14(木)朝映画をちょっとみる13:12

http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_feature2d/py_matcher/py_matcher.html
BFMatcher型オブジェクトを一度作れば,それ以降重要なのは BFMatcher.match() と BFMatcher.knnMatch() になります.前者は各点に対して最も良いマッチングスコアを持つ対応点のみを返しますが,後者は上位 k 個の特徴点を返します.knnMatchはマッチング以降に追加で処理をする時に便利かもしれません.

matchesはDMatchクラスの配列になっている。どうやって座標を取得するのか?
OpenCVで特徴量の座標を取得する
https://qiita.com/hayata-yamamoto/items/d4033e6652c8fe68698b
上のこれか?img1_pt = [list(map(int, kp1[m.queryIdx].pt)) for m in matches]img2_pt = [list(map(int, kp2[m.trainIdx].pt)) for m in matches]
?動いたっぽいコードはできたけど盛大な失敗っぽい。これはこれで終了か?
いやまだやれるよちはあるか?matches[:100]をmatches[:30]に変更
あんまり変わらない。
https://qiita.com/hayata-yamamoto/items/d4033e6652c8fe68698b
実装する際には、いらないものをKnnで切ったりすると適切な対応関係を持つ座標のみを利用することができます。※ハズレのデータを取り除く作業は、データに応じて決めてください
knnでやってみるか?それぞれの数値は何を意味するのか?距離許容比率が0.75だとポイントがないからもう無理なんじゃないか?そもそもAKAZEは「同じ画像を検出する」のが目的だから、近似画像をマッチングさせたところでどうにかするのは難しいと思う。
illustratorのブレンダーってどうやっているんだ?opencv blenderで調べてみようか。→見たけどよくわからなかった。
monokaitextmateを入れてみることにした。https://qiita.com/iorionda/items/af9b906ed5b68dece146

git clone https://github.com/textmate/textmate.git
→OKbrew install —HEAD https://raw.github.com/adamv/ homebrew-alt/master/head-only/ninja.rb→エラーでこける curl: (22) The requested URL returned error: 400 Bad Request URLが生きていない。 検索するとこれっぽい https://github.com/Homebrew/homebrew-core/blob/master/Formula/ninja.rb brew install —HEAD https://github.com/Homebrew/homebrew-core/blob/master/Formula/ninja.rb これで行けるかな? だめだ。ただのhtml を指定しているから。 https://raw.github.com/Homebrew/homebrew-core/blob/master/Formula/ninja.rb
 他のサイトに書いてあるのURLを使う。上はスペースが入っている。 brew install –-HEAD https://raw.github.com/adamv/homebrew-alt/master/head-only/ninja.rb でも失敗。 とりあえず先に進むか?brew install ragel boost multimarkdown hg→OK

インストール中も諦められないから調べている。opencv アウトライン 座標
でもなーopencv 頂点 検出
頂点を検出してそれを合成する?頂点があっているなら合成ができないよね。頂点検出もfindContours(輪郭検出)を使うらしい。
次の手としては、頂点検出とそれらのマッチングを行う?外接矩形を切り出して丸ゴシックの線のようなものも矩形で切り出せばいける?
輪郭を取得して矩形で取得する。どこが対応するのかは、やっぱり人の手がいる。illustratorのブレンダーのように。結局は人工知能が必要になるかもしれない。三つの手順が必要。①opencv の輪郭の近似で輪郭を取得②マッチングする特徴点を指定してあげる (ここは人工知能が必要?どうやって学ばさせるの?)③特徴点から輪郭に対して中間点等設定してあげて モーフィングを実行してみる必要がある。
今は無理。次に行こう。

⚠️ **GitHub.com Fallback** ⚠️