思いつくままを綴る雑記帳

OpenCV 3.0

以前にPython2.x系で動作する版の頃に少しだけ見た程度で・・・その頃には既にBlenderでは3.x系にPythonが変わっていてBlenderからは使えないなぁと・・・・それで頭の中から消えかけていたんだけど。
今年OpenCV 3.0が提供されて正式にPython3.xに対応したと聞いたので試してみたんだけど・・・。
公式PackにはPython3.xバインドが無いらしいと・・・それでいつも探している非公式のUnofficial Windows Binaries for Python Extension Packagesで、.whlファイルを探したらwin32用のがあったのでインストール・・・。
しかし、Python3.4でimportすると何やらエラーが・・・・。
えぇぇぇぇ駄目じゃんと思いつつ、ググって調べると・・・関係しそうな記事を発見・・・。
The procedure entry point InitializeCriticalSectionEx could not be located in the dynamic link library KERNEL32.dll
Visual Studio 2012 Update 2を適用するとWinXpで動かないバイナリが生成されるかも・・・的な?
確かに猫さんの環境ではKERNEL32.dllにそんなエントリーポイントは無い・・・。

で、猫さんの環境じゃ使えないわ・・・と、放置していたんだけど・・。
BlenderのビルドがVisual Studio 2013以前のコンパイル環境をサポートしなくなってたので、しばらくビルドなんてしてなかったからね・・・。
で最近ふとっ、ある記事が目に付いたんです。
mingwでビルドした人がいると・・・・Blenderも以前はmingwでビルド出来たけど、ご多分に漏れず対象外になったんだよね・・・。
猫さんも最初はmingwでBlenderをビルドしようとしてインストールした経験が・・・でも、バージョン管理用にcygwinが使われずに残ってただけで・・・。
という具合だったので、まさかmingwでビルド出来るのかなぁと半信半疑でした・・・。

そして、いつものようにググってググって記事を読み漁ってました。
で、結局ビルド出来てPython3.4で動作確認出来ました。
Blender2.75にも入れてみてインポートが出来るのは確認したけど・・・Blenderの終了時に変なエラーを吐くのでBlenderで使うのは取り止めと・・・。
でも、Python3.4で使えるのは何かの機会に何かするのにはいいかも・・・。
猫さんのやった方法は以下の方法。
・mingw32をインストール。
 以前にcygwinといっしょにインストールしていたけど、そっちは一度アンインストールした。
 版が古かったので最新版にするのにGUI Installerのmingwがあるらしいので、それを使った。
 MinGW Installation
・cmake-2.8.12.2-win32をインストール。
 最新版は3.3ぽいけど、opencvのドキュメントを見ると3.1版で書かれている様・・・。
 メジャーバージョンアップしているのは、少し嫌なので元々入れていた版の更新版にしました。
・Opencvのソースをインストール。
 但し、公式サイトのexeからではなくGit リポジトリから入手したソースをインストール。
 一度、公式サイトのソースでビルドしたらエラーが出たので・・・たぶん更新されているリポジトリから再入手した。
・cmakeでコンフィグを設定して、赤色表示されないようになったらジェネレート・・・。
 後はmingw32-makeを実行するだけ・・・。

ビルドが成功したら、ビルドフォルダ/libフォルダ内のcv2.pydとlibcv2.dll.aをPythonのsite-packagesフォルダ下にコピーすれば準備OK。
スポンサーサイト

呆れたわ

いや、正味の話呆れ果てました。
よく知りもしないソフトウェアの公式マニュアルを一通り読みもしないで、どこに書いてあるか分からないと言う人がいるんですか?
そりゃ、中身も見ていなければどこに何が書かれているかも分からないのは当たり前!。
そんな状態で自分流の言葉で訳の分からない質問書いておいて、説明して欲しい?
それって陸(ろく)に調べもしないで質問していると言ってるのと同じですよね?
こんな自己中丸出しの人いるんだね・・・。
(自分は面倒臭いからやらないけど、回答してくれる人には手を焼かせる人って、こういう考えなんだろうな・・・)
関わらんとこ。 それが安全、精神衛生上それが肝要。
猫さん、BlenderもPythonも一度は全て目を通しましたけど・・・。
それでも今でも肝心のことを調べる時には探しまくりですが・・・。
猫さん記憶力にはもう自信がないので、何かを書く時には調べ直してから書くようにしてます。
いつもお世話になってるサイトではこんな事書けないので、自分のブログで書きました。
続きを読む

障害物を避けて伸びるCurve object (Reroute)

暫くネット環境から離れていたので・・・その間に思いついたパーツを作ってました・・。
RouteSearch.png
例えば、こんなのです。(AllRouteSearch.py)
これはObject上の1つのfaceを指定してそれに隣接するfaceを辿った経路をEdge Objectにするという物・・。
まぁ、パーツ作りの検証用の作り物・・・。

reRouteCurve.png
で、これが前述のパーツを改良してPoint-To-Pointで経路を検索して進行方向にあるMesh Objectを避けながら目標のObjectまで伸びるBezier Curveを生成する物。(reRouteCurve.py, reRouteCurve.blend)
reRouteCurve2.png
Objectの裏側はこんな風になってます。

どちらも猫さんの製作物置き場の4Shared/MediaFireにあるはず・・・。
(4Sharedの方にはたまに無い事も・・・接続悪いので・・・)

以前に記事で書いたWormCurve.pyも一部修正してありますが・・・。
ObjectからObjectに移動する際に移動元のObjectを貫通する可能性があるのは修正してません。
この障害物を避ける機能で・・・なんとかなるはずだけどね・・・。
続きを読む

久々にハマッタ・・・

Blenderである処理の高速化をしようとPythonでテストコードを書いていたんだけど・・・
久々にハマッタわ・・・・えっ・・・なんでこうなるの?って。

これたぶんバグではなく、仕様のはずなんだけどね。

a = [[]]*5
a[0].append(1)

こうするとaの中身はどうなってると思いますか?
ちなみにaを初期設定した時の状態はこうなってます。
a = [[],[],[],[],[]]
空の配列5個を含む配列ですね。
で、アペンドした結果が
a = [[1],[],[],[],[]]
となっていると思ったあなた・・・・間違いです。
本当は
a=[[1],[1],[1],[1],[1]]
これが正解。
初期設定した時に同じ値を持つデータブロックを参照するように初期設定されるんだろうね。
で、アペンドする前に配列の長さを調べて空配列だったらそのデータの配列を代入するようにすると以後予想通りに使用できると・・・。
書いてたテストコードのどこに間違いがあるんだろうと20, 30分う~んう~んと調べまくってた。
頭でこれ仕様だよね・・と、自信なさげに書いたのはPython3.4/2.7のIDLEで試したけど結果が同じだったので・・。
仕様調べたけど猫さんの調べた範囲ではこれについて書かれている所は分かりませんでした・・・。
続きを読む

Blender Tips(Properties Panel)

BlenderのBug Trackerを覗いていて、これ勘違いし易いのでは? と思ったことを短めに・・。
3DView画面でNキーを押下すると表示されるProperties PanelでEdit-mode中にElementsの長さ/角度を表示するMesh Displayというセクションがあります。
この中でEdge Lengthは辺の長さを表示・・・これはそのままだよね。
ではEdge Angleとは・・・何を表示している?
辺と辺の成す角度? と、思った人は勘違いである。
それはFace Angleで表示される。
面内の辺と辺の成す角度がFace Angle。
Edge AngleはそのEdgeを共有する面と面の成す角度を示しています。
screen_20150707140313b4c.png
勘違いしそうなので・・・一応Tipsということで・・・・。

ちなみにPlaneでEdge Angleが表示されないのは・・・考えれば分かると思いますが。
そのEdgeを共有する面が複数ないので計算できないからですね。
  次のページ >>