4

話:

iphone SDK 6.0でopencvを使用してビルドされた顔を検出するアプリがあります。すべてが機能しています。フロントカメラと「バックカメラ」を使用できます。また、トーチのオン/オフを切り替えることもできます。現時点で(ライブ)。

でも今は、この顔がどれだけ離れているかを確認できる機能を追加したいと思います

ここに画像の説明を入力

いくつかの公式や良いアイデアはありますか、それともプロからの解決策はありますか? (コードや何かが必要な場合は、必要なものすべてをお見せします)

ヘルプと素早い回答をありがとうございます !^^

聞くことは、目的cの翻訳です

-(double) faceDistance{
    const NSInteger kFaceWidth = 10;
    const NSInteger kPicWidth = 640;
    CGPoint p1 = CGPointMake(10, 10);
    CGPoint p2 = CGPointMake(100, 70);
    int facePixelWidth;


    int slope = (p2.y - p1.y) / (p2.x - p1.x);

    double propOfPic = kPicWidth / facePixelWidth;
    double surfSize = propOfPic * kFaceWidth;
    double dist = surfSize / slope;

    return dist;
}

ここでコードを更新しましたが、目的cのソリューションです

4

1 に答える 1

5

私は画像処理/AR の仕事をしたことがありますが、自分が専門家であるとは考えていません。とはいえ、この問題にどのようにアプローチするかに移りましょう。

顔がどれだけ離れているかを把握している場合は、顔の平均サイズに基づいて概算できます。私が言いたいのは、人間の顔のサイズはすべてかなり似ているということです (どの方向にも数 cm 以上ずれることはありません)。したがって、いくつかのテストを行うと、顔がいくつかの距離にあるピクセル数を把握し、trig を使用して他の距離を概算できます。明らかに、この方法では非常に正確な距離を計算することはできませんが、0.5 メートル離れた人と 3 メートル離れた人を区別できます。

使用しているカメラの解像度を知る必要があり、可能性のある各解像度でテストを行う可能性があります。

更新

わかりましたので、もう少し詳しく説明するように求められました。写真に表示されるスペースの量は、表面がカメラからどれだけ離れているかに比例します。

人間の顔の幅が10cmだとします

では、カメラをメータースティックに直角に向けましょう。カメラを 10 cm 離します。それはどのくらい見えますか?メータースティックの10cmが見えるとしましょう。

今度はカメラを 1 m 離します。それが今70cmを見ているとしましょう。この情報を使用して、次の Java を生成できます。

public static final int FACE_WIDTH = 10;
public static final int PIC_WIDTH = 640; // In pixels
Point p1 = new Point(10,10);
Point p2 = new Point(100,70);
int slope = (p2.y-p1.y)/(p2.x-p1.x);

public static double faceDistance(int facePixelWidth)
{
    double propOfPic = PIC_WIDTH / facePixelWidth;
    double surfSize = propOfPic * FACE_WIDTH;
    double dist = surfSize / slope;
    return dist;
}

これはうまくいくはずです。私はそれをテストしていませんが、数学的には正しいようです。

于 2013-01-23T14:56:59.220 に答える