前提・実現したいこと
dlib & swift を使った以下
https://github.com/zweigraf/face-landmarking-ios
のソースを修正して
縦画面において、顔の座標を取得できるようにしたいです。
横画面だと、問題なく以下画像のように顔の座標が取得できます。
発生している問題・エラーメッセージ
自分が修正したソースですと、以下のようにポイントが取れなく、円ではなく線を描画をしてしまいます。
該当のソースコード
https://github.com/zweigraf/face-landmarking-ios
試したこと
https://github.com/zweigraf/face-landmarking-ios
のソースを以下2点だけ修正しました
- Device Orientation の Portraitを選択 (TargetをiOS13.2にしてますが、これはあまり関係なさそうでした)
- captureOutput に connection.videoOrientation = .portrait を追加
// MARK: AVCaptureVideoDataOutputSampleBufferDelegate func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) { connection.videoOrientation = .portrait
これを行って、縦画面にすると横画面時には円なのに、縦画面時に線になってしまいます。
connection.videoOrientation = .portrait
の指定をすると、かならず 円 -> 線 になってしまいます。
描画している箇所はDlibWrapper.mmのdraw_solid_circleです。
for (unsigned long j = 0; j < convertedRectangles.size(); ++j) { dlib::rectangle oneFaceRect = convertedRectangles[j]; // detect all landmarks dlib::full_object_detection shape = sp(img, oneFaceRect); // and draw them into the image (samplebuffer) for (unsigned long k = 0; k < shape.num_parts(); k++) { dlib::point p = shape.part(k); draw_solid_circle(img, p, 10, dlib::rgb_pixel(0, 255, 255)); } }
ちなみに、顔の座標に関係なく以下のように1点だけ描画するようにしてみたところ、
dlib::point p(747, 719); draw_solid_circle(img, p, 10, dlib::rgb_pixel(0, 255, 255));
captureOutput に connection.videoOrientation = .portrait を追加するだけで
円 -> 線
になってしまいました。
dlib::shape_predictor の処理は 円 -> 線 の処理に関係なさそうでした。
.portrait 指定した時に、dlibのイメージが壊れるのかなんなのか、、、
補足情報(FW/ツールのバージョンなど)
MacOS Catalina 10.15.2
Xcode 11.3.1
iPhone7 (iOS 13.3.1
commit version
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。