3

Pythonで画像処理をしようとしています。私が実際にやりたいのは、人間のイメージを持っていることです。人間の顔を識別したり、円(基本的には人間の顔)を検出したりする必要があります。私がこれまでにしたこと

  1. ソーベルエッジ検出を使用して画像のエッジ検出を行いました。

  2. 次に、画像をバイナリ画像に変換しました。これにより、バイナリ画像が保存され、0または255(白黒)の画像の配列が印刷されます。

  3. さて、この後私が混乱しているのは、画像内の円を検出し、画像内に存在する人間の数を印刷するために何ができるかです。

  4. 静止画を使用しているので、画像の入力をします

Python、PIL、NumPy、SciPyを使用しています。OpenCVを使いたくない。人間の顔を検出し、画像に写っている人物の数を数えてから、画像に写っている人物の数を印刷したいと思います。

import numpy
import scipy
from scipy import ndimage

im = scipy.misc.imread('test5.jpg')
im = im.astype('int32')
dx = ndimage.sobel(im, 0)  # horizontal derivative
dy = ndimage.sobel(im, 1)  # vertical derivative
mag = numpy.hypot(dx, dy)  # magnitude
mag *= 255.0 / numpy.max(mag)  # normalize (Q&D)
scipy.misc.imsave('sobel.jpg', mag)

上記のコードは私のものではなく、オンラインから入手したものです。

他のフォーラムでもこの質問をしました。ここ

4

3 に答える 3

3

あなたがやりたいことは、scipy、numpy、sklearnで実行可能です。

最初に顔のデータをたくさん収集し、次に顔ではないランダムなデータをたくさん収集する必要があります。

つまり、顔の画像が2000枚、顔以外の画像が10000枚あるとします。次に、それらをすべてロードし、サイズと強度を正規化してから、分類のためにSVMに渡す必要があります。顔写真のラベルは1、非顔のラベルは0である必要があります。

images = [image1, image2, image3... imagen]
labels = [0 1 1 ... 0]

上記でこれを構築したら、それをsvmに渡す必要があります。

faceclassifier = SVC()
faceclassifier.fit(images, labels) 

詳細はこちら http://scikit-learn.org/dev/modules/generated/sklearn.svm.SVC.html

次に、新しいクエリ画像ごとにスライディングウィンドウですべてのブロックを取得し、各ブロックをSVMに渡します。

SVMの結果が高い場合は、顔を表すブロックとして分類します。そうでない場合は、顔ではありません。

一般に、画像処理技術を使用して正確な顔検出器を構築する方法はありません。コンピュータービジョンと機械学習を使用する必要があります。

于 2013-02-24T11:10:48.943 に答える
0

エントロピースの投稿に同意します。コンピューター ビジョンと機械学習を使用することは、このような問題に対する通常のアプローチです。

ただし、この目的のために円検出を使用して試してみたい場合は、Circle Hough Transform を調べることをお勧めします。他のライブラリを使用したくない場合は、最初からコーディングするのもかなり簡単です。

于 2016-10-21T09:08:46.533 に答える