VOOZH about

URL: https://qiita.com/woxtu/items/bf39e3d53cbf60396d2c

⇱ 二次元絵の顔を検出する #Clojure - Qiita


👁 Image
56

Go to list of users who liked

47

Share on X(Twitter)

Share on Facebook

Add to Hatena Bookmark

More than 5 years have passed since last update.

@woxtuin👁 Image
Qiitadonユーザー会

二次元絵の顔を検出する

56
Last updated at Posted at 2014-04-09

 概要です。

ScalaでOpenCVを使って画像処理 http://t.co/dn1jvLDstM これを参考にClojureからOpenCVを、誰かがやってくれると思う

— 島風/天江衣分類器作成マン (@AntiBayesian) April 8, 2014

上の記事の流れを全く無視して、二次元絵の顔の検出をします。

 試した環境です。

  • Mac OSX 10.11.6
  • OpenCV 3.2.0
  • Clojure 1.8.0
  • Java 1.8.0_121

準備

 インストールの様子です。

# Homebrew
$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
$ brew update

# Leiningen
$ brew install leiningen

# OpenCV
$ brew install homebrew/science/opencv3 --with-java

$ ls /usr/local/Cellar/opencv3/3.2.0/share/OpenCV/java/
libopencv_java320.dylib opencv-320.jar

 プロジェクト作成の様子です。

# プロジェクトをつくる
$ lein new karen
$ cd karen

# 先に生成したファイルをプロジェクトにコピーしてくる
$ mkdir lib
$ cp /usr/local/Cellar/opencv3/3.2.0/share/OpenCV/java/libopencv_java320.dylib lib/
$ cp /usr/local/Cellar/opencv3/3.2.0/share/OpenCV/java/opencv-320.jar lib/

project.clj を編集します。

(defprojectkaren"0.1.0-SNAPSHOT":description"FIXME: write description":url"http://example.com/FIXME":license{:name"Eclipse Public License":url"http://www.eclipse.org/legal/epl-v10.html"}:dependencies[[org.clojure/clojure"1.8.0"]];; 以下を追記、適宜変更すること:jvm-opts["-Djava.library.path=lib/"]:resource-paths["./lib/opencv-320.jar"]:injections[(clojure.lang.RT/loadLibraryorg.opencv.core.Core/NATIVE_LIBRARY_NAME)]:mainkaren.core)

:jvm-opts:resource-paths でパスの設定、:injections でプロジェクト実行の度に dylib を読むように設定、という感じです。

グレースケール変換

 画像のグレースケール変換やります。適当な画像を用意してください。

$ lein repl
karen.core=>(org.opencv.core.Core/VERSION)"3.2.0"karen.core=>(import[org.opencv.imgcodecsImgcodecs])org.opencv.imgcodecs.Imgcodecskaren.core=>(import[org.opencv.imgprocImgproc])org.opencv.imgproc.Imgprockaren.core=>(defimage(Imgcodecs/imread"karen.jpg"))#'karen.core/imagekaren.core=>(Imgproc/cvtColorimageimageImgproc/COLOR_RGB2GRAY)nilkaren.core=>(Imgcodecs/imwrite"karen_gray.jpg"image)true

👁 D進どうですか

楽しい! ✌(’ω’✌ )三✌(’ω’)✌三( ✌’ω’)✌

ClassNotFoundException が出るときは jar のパス、UnsatisfiedLinkError が出るときは dylib のパスに不備がある、と思われます。

顔の検出

 二次元絵の顔の検出やります。OpenCV 用のアニメ顔分類器(lbpcascade_animeface.xml)をダウンロードして適当な場所に置いてください。

src/karen/core.clj を編集します。

(nskaren.core(:import[org.opencv.coreMatMatOfRectPointScalar])(:import[org.opencv.imgcodecsImgcodecs])(:import[org.opencv.imgprocImgproc])(:import[org.opencv.objdetectCascadeClassifier]))(defn-main[&args](let[filename(firstargs)image(Imgcodecs/imreadfilename)gray(Mat.)faces(MatOfRect.)];; 画像をグレースケール変換したあと、ヒストグラムを均一化する(Imgproc/cvtColorimagegrayImgproc/COLOR_RGB2GRAY)(Imgproc/equalizeHistgraygray);; アニメ顔分類器を使って顔を検出する(doto(CascadeClassifier.)(.load"lbpcascade_animeface.xml")(.detectMultiScalegrayfaces));; 検出した顔の位置に四角形を描画する(doseq[face(.toListfaces)](let[src(Point.(.xface)(.yface))dst(Point.(+(.xface)(.widthface))(+(.yface)(.heightface)))](Imgproc/rectangleimagesrcdst(Scalar.14448255)2)));; 結果をファイルに出力する(let[[_baseextension](re-find#"(.*)\.([A-Za-z]*)$"filename)](Imgcodecs/imwrite(strbase"_result."extension)image))))
$ lein run karen.jpg

👁 See You Next Time

楽しい! ✌(’ω’✌ )三✌(’ω’)✌三( ✌’ω’)✌

終わりに

 参考情報です。

56

Go to list of users who liked

47
0

Go to list of comments

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56

Go to list of users who liked

47