前提・実現したいこと
顔検出に関するプログラミングを作っています。
右頬左頬の範囲から顔の向き(pitch,yaw,roll)を推定するための関数内でエラーが出たのでエラーの原因を探っていたところ、sympy.solve()関数部分がおかしいということがわかりました。
ratioは大体0.7ぐらいなので解はあるはずなのですが、print(ans)で表示しようとしても何も表示されません。
ここで計算結果が出てこないため、この関数を使うと
UnboundLocalError: local variable 'yaw' referenced before assignment
というエラーが出てしまいます。
何故計算結果が出てこないのか、何がおかしいのか教えていただきたいです。
該当のソースコード
python
1import math 2import sympy 3 4def head_pose(wl, wr, hl, hr, xr2, xl1, yr2, yl2): 5 #pitch 6 pitch = 0 7 #yaw 8 yaw = 0 9 if wl > wr: 10 ratio = wr / wl 11 ans = sympy.solve(((1 - math.sin(x)) / (math.sin(x) + math.cos(x))) - ratio) 12 print(ans) 13 for i in ans: 14 if i < 2*math.pi: 15 yaw = i 16 else: 17 ratio = wl / wr 18 expr1 = ((1 - x) / (x + y)) - ratio 19 expr2 = x*x + y*y - 1 20 ans = sympy.solve([expr1, expr2]) 21 print(ans) 22 for i in ans: 23 if i > -2*math.pi: 24 yaw = i 25 26 #roll 27 if yl2 > yr2: 28 roll = math.atan((yl2 - yr2) / (xl1 - xr2)) 29 else: 30 roll = - math.atan((yr2 - yl2) / (xl1 - xr2)) 31 32 return pitch, yaw, roll
試したこと
sympy.solve()関数内にmath.sin()などがあるといけないのかと思い、else文ではmath.sin(x) = x, math.cos(x) = y, x^2 + y^2 = 1として連立方程式に変えていますが意味は無かったです。
pitchはとりあえず0としていて、rollは計算できています。
補足情報(FW/ツールのバージョンなど)
Windws7
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/05 09:01
2018/12/05 09:26
2018/12/06 02:05
2018/12/06 02:15 編集
2018/12/06 02:20
2018/12/06 02:47
2018/12/06 02:56
2018/12/06 03:07 編集