• 過去のblog : http://ameblo.jp/dandelion/

OpenCV/videoInput Libraryによるビデオキャプチャのサンプルプログラムについて,
HandyARのデモが動かない問題の原因を発見した - サイScripterの旅立ちにて以下の指摘がありました.

どこのサイトを見ても、どうも怪しいコードしか載っていないように見える。

cvCreateImage後はimageDataにアロケートされているんだから、imageDataに代入しちゃったら解放するアドレスがわからないと思うんだけどなぁ。

でもメモリーリークの警告でないしなぁ・・・


結論から言うとメモリ解放について問題は無いです.ということで,
こちらとしても,「怪しいコードと断定」されるのも癪なので,
なぜ問題無いかについて少し書いてみます.

まず,cvReleaseImageの内部で何をやっているかというと,
確保したイメージ領域の解放のためにcvReleaseDataをコールしています.
cxarray.cppのcvReleaseData関数の中身を以下に示します.

C++:
  1. // Deallocates array's data
  2. CV_IMPL void
  3. cvReleaseData( CvArr* arr )
  4. {
  5.     CV_FUNCNAME( "cvReleaseData" );
  6.    
  7.     __BEGIN__;
  8.  
  9.     if( CV_IS_MAT_HDR( arr ) || CV_IS_MATND_HDR( arr ))
  10.     {
  11.         CvMat* mat = (CvMat*)arr;
  12.         cvDecRefData( mat );
  13.     }
  14.     else if( CV_IS_IMAGE_HDR( arr ))
  15.     {
  16.         IplImage* img = (IplImage*)arr;
  17.  
  18.         if( !CvIPL.deallocate )
  19.         {
  20.             char* ptr = img->imageDataOrigin;
  21.             img->imageData = img->imageDataOrigin = 0;
  22.             cvFree( &ptr );
  23.         }
  24.         else
  25.         {
  26.             CvIPL.deallocate( img, IPL_IMAGE_DATA );
  27.         }
  28.     }
  29.     else
  30.     {
  31.         CV_ERROR( CV_StsBadArg, "unrecognized or unsupported array type" );
  32.     }
  33.  
  34.     __END__;
  35. }


その中で,
C++:
  1. if( !CvIPL.deallocate )
  2. {
  3.     char* ptr = img->imageDataOrigin;
  4.     img->imageData = img->imageDataOrigin = 0;
  5.     cvFree( &ptr );
  6. }

という部分からわかるように実際に解放するメモリ領域の先頭アドレスとして指定されるのは
img->imageDataOriginであることがわかると思います.

では,img->imageDataOriginって何?という話になるので,
IplImage構造体について一度確認してみましょう.
cxtypes.hのIplImage構造体の定義を以下に示します.

C++:
  1. typedef struct _IplImage
  2. {
  3.     int  nSize;         /* sizeof(IplImage) */
  4.     int  ID;            /* version (=0)*/
  5.     int  nChannels;     /* Most of OpenCV functions support 1,2,3 or 4 channels */
  6.     int  alphaChannel;  /* ignored by OpenCV */
  7.     int  depth;         /* pixel depth in bits: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16S,
  8.                            IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F are supported */
  9.     char colorModel[4]; /* ignored by OpenCV */
  10.     char channelSeq[4]; /* ditto */
  11.     int  dataOrder;     /* 0 - interleaved color channels, 1 - separate color channels.
  12.                            cvCreateImage can only create interleaved images */
  13.     int  origin;        /* 0 - top-left origin,
  14.                            1 - bottom-left origin (Windows bitmaps style) */
  15.     int  align;         /* Alignment of image rows (4 or 8).
  16.                            OpenCV ignores it and uses widthStep instead */
  17.     int  width;         /* image width in pixels */
  18.     int  height;        /* image height in pixels */
  19.     struct _IplROI *roi;/* image ROI. if NULL, the whole image is selected */
  20.     struct _IplImage *maskROI; /* must be NULL */
  21.     void  *imageId;     /* ditto */
  22.     struct _IplTileInfo *tileInfo; /* ditto */
  23.     int  imageSize;     /* image data size in bytes
  24.                            (==image->height*image->widthStep
  25.                            in case of interleaved data)*/
  26.     char *imageData;  /* pointer to aligned image data */
  27.     int  widthStep;   /* size of aligned image row in bytes */
  28.     int  BorderMode[4]; /* ignored by OpenCV */
  29.     int  BorderConst[4]; /* ditto */
  30.     char *imageDataOrigin; /* pointer to very origin of image data
  31.                               (not necessarily aligned) -
  32.                               needed for correct deallocation */
  33. }
  34. IplImage;


コメントにもありますが,imageDataOriginは,cvCreateImageで確保したイメージ領域を解放する
ことを保証するために用意されていて,実際にcvCreateImage関数の内部で
呼ばれるcvCreateData関数の中で,イメージ領域の割り当て時に
イメージ領域の先頭アドレスはimageDataとimageDataOriginの両方に格納されます.
cvarray.cppのcvCreateData関数の一部を以下に示します.

C++:
  1. if( !CvIPL.allocateData )
  2. {
  3.     CV_CALL( img->imageData = img->imageDataOrigin =
  4.                         (char*)cvAlloc( (size_t)img->imageSize ));
  5. }


ということで,imageDataが変更されても,imageDataOriginにイメージ領域の先頭アドレスが
格納されているので,cvReleaseImageできちんと解放されることがおわかりいただけると思います.

そんなわけで,OpenCVの内部でどうなっているかを把握した上で書いている点ご理解ください.
※誤解を生まないようVI.getPixelsで取得したイメージデータをmemcpy使ってコピーすれば
 いいんでしょうけど,ループ中にメモリコピーを行うと速度が落ちそうなので,ポインタの変更で済ませちゃってます.

#まぁ,指摘通り,C,C++がある程度わかる人には一見危なそうに見えるのは事実なんですが,
#このようにきちんと内部動作まで解説するとそれなりに大変で,初心者がそれを読むと挫折しそうなので
#今のところ説明を省いています.その辺のバランスって難しいですよね。。。
#何か良い案があれば教えてください.

同期曰く,年齢を重ねていくうちに運動しても体重が減りにくくなるターニングポイント的なものを
感じる瞬間があるらしい.今のところそんな予兆は全くないけど恐ろしい.
自分の場合,学生時よりも運動量は減って,食べる量は増えた気がするんだけど,
体重は平行線なので,むしろ,原理が説明できない自分の身体が不気味でしょうがない(苦笑)

とか書くと,いろんな方面から反感を買いそうだけど,「食べ過ぎて運動しなかったら太る」という
ごく当たり前の法則が成り立たないのはなんだか気持ち悪い.摂取したエネルギーは何処へ(遠い目)

というか,どんだけ燃費が悪いんだ。。。orz
#逆に原理がわかればビジネスになりそうだけど.

***********

詳解 Objective-C 2.0
著者/訳者:荻原 剛志
出版社:ソフトバンククリエイティブ( 2008-05-28 )
定価:¥ 4,410
大型本
ISBN-10 : 4797346809
ISBN-13 : 9784797346800



も時間を見つけてちょこちょこ読んでますが,
Objective-Cは特殊な言語? - @ITはさらっと読めそうなので,後で読んどこう.
それにしてもなかなかObjective-C独特の記述に慣れないな。。。

CocoaアプリやiPod touchアプリを開発するなら必須の知識らしいので,
なんとか身につけたい言語ではあるんだけど.

久しくOpenCVで遊んでないけど,これまで書き損ねてた豆知識的な事を書いてみます.参考までに.

■opencv_introduction
既出かもしれませんが,opencv-docにある
・opencv_introduction_2007June9.pdf
・opencv_objectdetection_2007june10.pdf
が結構良い感じにまとまっているよなーと.
この発表の資料かな?

(英語だけど)OpenCVの概要を掴むには良い教材だし,それなりに情報も新しい.
他所の情報を引用しただけの微妙なサイトよりも遙かに有用.

■CodingStyleGuide
ソースを直に読むなら,既存のファイルや関数の命名規則などが分かっていた方が遙かに効率が良いです.
CodingStyleGuide - OpenCV Library Wikiに軽く目を通すだけでも効率アップするはず!!

■CVS版
人柱的な意味合いが強いのでCVS版は避けられがちですが, 機能追加やbug fixがあって,
面白いので時々チェックしてます.

例えば,CVS版には,otherlibsの下にffopencvというディレクトリが新規で追加されてたりします.
CVSのコメントには,
>ffmpeg wrapper for opencv
と書かれているので,うまく使えばいろんな動画フォーマットに対応できるのかな?(多分)
あと,CVS版には目検出用の学習データ
・haarcascade_eye_tree_eyeglasses.xml
・haarcascade_eye.xml
が追加されていたりします.新しもの好きな方はCVS版で遊んでみる価値アリかも.

■公式サイト消失!?
個人的に結構前から凄く気になっていたのですが,IntelにあるOpenCV 公式サイトが無くなってますよね。。。
もしかして,Intelが手を引こうとしている??最近,というかかなりMLのチェックを怠ってたので,状況が掴めてません.
OpenCV本がそろそろ出るだけに気になる所です.

Learning OpenCV
著者/訳者:Gary Bradski Adrian Kaehler
出版社:Oreilly & Associates Inc( 2008-10-03 )
定価:¥ 4,785
ペーパーバック
ISBN-10 : 0596516134
ISBN-13 : 9780596516130

行こう行こうと思っていて,すっかり忘れていたのでソニー・エクスプローラサイエンスに足を運んできた.
インターフェースの研究では有名なSmartSkinを応用したデモやTHE EYE OF JUDGMENTなどの
実物が体験できたので良かった.

あと,Hot Cold Coilsという温かいコイルと冷たいコイルが交互に配置されているコイルがあって,
それぞれ単体を触ると普通なんだけど,同時に触ると痛みを感じるのが不思議だった.
#人間は温と冷の相対的な感覚を脳内で痛みとして知覚するらしい.

それ以外にも科学の楽しさを体験できるコンテンツがたくさんあって,
こういうのを子供のときに体験できるのはいいなーと思ってみたり.

*********************
IPA(情報処理推進機構)がWebサイト運営におけるセキュリティ対策の必要性を
ゲーム形式で学ぶことができるソフトウェアを安全なウェブサイト運営入門で配布しているらしい.

これは,「外部からダウンロードした.exeファイルを安易に実行してはいけない」という事を学ばせるために,
起動直後にエラーメッセージが出るんじゃないかと気が気でないので,実行できない(苦笑)
と冗談半分で書いてみましたが,そこまでやってくれると,なかなかやるな!!>IPA って思えるかも.

#この反応はWeb管理者としてはどうなんでしょうか?(何にも考えずダブルクリック♪よりはマシだと思いたいけど。。。)

*********************
夕方,雷と雨が酷くてビックリした.これが巷で噂の「ゲリラ豪雨」というやつか。。。
#寝ているときは,雷や地震には全く気が付かないので「昨日の晩,雷凄かったよねー」
#とかいう会話に乗っかれない人です.深夜に天災が起きた時が不安でしょうがない。。。

【コラム】OS X ハッキング! (288) 一部で話題の「touche」をiSightで使う | マイコミジャーナル

この記事は見逃してた!!
設定方法などが書かれているので金曜あたりに試してみる.

あと,以下の記事を見つけたので明日の朝読もう!!
今日は寝る。。。

【レポート】SIGGRAPH 2008 - NEW TECH DEMO展示セクションレポート(前編) (1) 虫がアナタの腕を這い駆け回る! | マイコミジャーナル
【レポート】SIGGRAPH 2008 - NEW TECH DEMO展示セクションレポート(後編) (1) マイクロ波で非接触通信 & 非接触電源 | マイコミジャーナル

気軽にマルチタッチを楽しめるキット:「Touchkit」(動画) : Gizmodo Japan(ギズモード・ジャパン)
の記事にあるようにTouchKitというマルチタッチのシステムが売られているらしい.
サイトのハードウェア情報をざっと読んだ感じだと,FTIR方式のような印象.

マルチタッチテーブルを自作している身としては,これを買ったら負けな気がする。。。(買わないけど)

気になるお値段は$1580(プロジェクターは別売).
実際に自分がFTIRで作ったときの感触だと,高く見積もってもハードウェアの値段はこんな感じかなと.

・アクリル板 2,000円
・赤外LED + 抵抗 + ACアダプタ 3,000円
・赤外カメラ(webカメラ改造) 3,000円

ということで,やる気と時間がある人は自作の方が安くて楽しいかも.

**************************
Microsoft Surface Tableを箱から取り出す瞬間 : Gizmodo Japan(ギズモード・ジャパン)

Microsoft Surfaceを箱から出す瞬間は,一般人ではなかなか目にすることができないので,こういう記事はうれしい.
欲を言うならばMicrosoft Surfaceの分解記事を(以下略)

**************************
iPhoneからキャラが3Dで浮き上がる:「iHologram」 : Gizmodo Japan(ギズモード・ジャパン)

これはiPhoneをうまく使ったアプリだなーと.
既存のPDAなんかでもいくつかセンサをつけてやれば同じものが作れそうですが,
iPhone単体で完結しているところがスゴイ.
ただ,App Storeで実際に売られているものではなく,デモンストレーションみたいですね.

アクセスが少し増えてきたので,今まで自分が作ってきたしょうもないものを挙げてみるテスト.

■学部
GA(遺伝的アルゴリズム)の研究室配属だったのに,OpenCVの存在を知り楽しそうだったので
学部4年の夏から研究テーマを画像処理に変更(一応,GAも前処理に入れてたりするけど).
#高専のときに画像処理をやってたので,ゼロからのスタートでないのが唯一の救い.

当時,OpenCVの日本語サイトはほとんど存在しなかったので,英語による情報収集がメインの暗黒時代でした.

研究としてはwebカメラで普通のディスプレイをタッチパネルにしよう!!という試み.
実際にやっていることはそんなに難しくなくて,2つのカメラで指先をトラッキングして,3次元位置情報を算出し,
スクリーンに触れているかを判定して,マウスの動作に置き換えているだけです.

あと,今思うと,マルチタッチとかやってみれば良かったなーと思いますが,
自分には先見の明がなかったのでそこまではやってない。。。



ペイント操作のデモ.320x240のキャプチャ画像を解析して,
ディスプレイ座標を算出しているので精度はお世辞にも良いとは言えない。。。


ブラウザ操作のデモ.それなりに動くのでやってて楽しかったデモ.
ただ,指先検出の前処理に肌色抽出をやっているため,webページに人の顔や
肌色に似た色が出てくると誤認識してしまう(苦笑)



■修士
可動式+透過型のマルチタッチスクリーン.マルチタッチはFTIR方式で実現.
情報の獲得と作業を並列に行う際にいかに視線移動を少なくできるかという考えのもとに実装.

透明なスクリーンにプロジェクターの映像をそれなりに投影しつつ,
FTIRも実現するということに地味に苦労した記憶が。。。
#透明なスクリーンに映像を投影するってことはスクリーンの上方向に光を拡散させないといけないんだけど,
#反面,FTIRをやる場合には,スクリーンの下方向に光を拡散させる必要があるのでかなり鬼門だった.

あと,下のムービーでは音をカットしていますが,音声合成による操作ナビゲートもやってたりします.



■修士(おまけ)
うちの大学院では,学部生が研究室をプチ体験できるイベントがあったりするわけですが,
そこで,参加者の学部生が用意していた課題を予想以上にこなしてしまったので,
急遽何か作ってくれと頼まれて作ったもの.
#実験室に3時間くらい籠もって学部生に見つからないように作ってた。。。

デモは,マーカーに書かれた場所にGoogle Earthで移動するというもので,
AISTだと産総研,JAISTだと北陸先端,NAISTだと奈良先端に移動します.
#体験セミナーのテーマが画像処理だったのでマーカー検出部も一から作りました.
#ただ,画像処理よりもGoogle Earth APIをC++側で操作する方がいろいろ苦労した気がします(苦笑)





アルゴリズムはこんな感じ.

1. 2値化
2. 輪郭線抽出
3. 輪郭線の多角形近似
4. 辺の数が4となる領域をマーカー領域として残す
5. マーカー領域のコーナー位置よりマーカーの傾きを計算
6. 傾き情報を用いてアフィン変換(傾き補正)
7. テンプレートマッチングにより文字認識
8. 認識結果をGoogle Earthに渡す

学部生対象の画像処理の課題に良いレベルだと思うので,オススメです.



と,ここまで書いてて思ったのは,学生時代しょうもないものばかり作っていたんだなぁと。。。(遠い目)
ということで,今日はこの辺にしときます.

第弐回天下一カウボーイ大会電脳フィギュアのブースがあったので,
タロタローグ的「電脳フィギュアはどうだった?」レポート。でも最後は芸者東京の文章力を疑って終了!
でも指摘されている「芸者東京サイトとblogでの特許に関する説明の矛盾点」+αについて質問してきました.

その前に,実際に体験してみた感想としては,タイムラグが酷いです。。。
マーカーを検出し損なった場合を補間するために過去の検出履歴でもとっているのか
やたらと動作がもっさりしていた.どういう処理をしているんだ.

と,これくらいにしておいて質問とその回答について書いてみます.

①特許に関する説明の矛盾点
■サイトの説明
>「電脳フィギュア」に関連する特許を出願中です。
>これは、電脳キューブの各面にあるマーカーを
>少なくとも1つ以上認識すれば、カメラに対する電脳キューブ の
>位置等の情報を特定できる技術です。
>この技術によって、カメラ位置を変えたり、キューブを回転させたりしても、
>表示が途切れることなくいろんな角度から キャラクターを見ることができます。
>また、表示されたキャラクター同士のモデルのインタラクションによって、
>キャラクターの動きや声などを変えたりができます。

電脳フィギュア - テクノロジーより引用

■blogエントリの説明
>あ、そういえば、特許だしているのもARの表示部分ではなく、
>(あれはなんぼなんでも公知っていうか論文もいっぱいありんす。。)他の部分ですぜ、。

もち肌ビジネスマン奮闘記: 電脳フィギュア ARis(アリス) 8月5日(火)のオビラジRっていう番組に出ます。より引用

この2つの説明を読んだら,複数マーカーについては周知の技術であることから,「矛盾しているだろ」
感じるのが普通の感覚であることを信じてその辺のお話を聞いたところ,直訳すると
「特許技術はマーカーを使った遊び方の提案で,マーカーの技術だなんて書いてないですけど」
といった感じの逆ギレ気味な回答.

でも,サイトの説明では「マーカー配置の工夫が特許技術」と言っているようにしか見えないのですが。。。
ということで,謎は逆に深まってしまいました.

どちらにせよ,差し出がましいですが,誤解を招かないような文章を書くことをオススメします.>芸者東京

#カウボーイ大会を楽しむためにあまり深く言及しなかったので,
#結局疑問は解けませんでした.スミマセン.

②mixiのARisコミュニティの説明
タロタローグ ブログ | 電脳フィギュアの基幹技術がARToolKitだと、mixiに明記してあったぞ!
にもあるようにmixiにあるARisのコミュニティは芸者東京の社長も認知しているみたいなのですが,
そのコミュニティのトップ画面に「電脳フィギュアの基幹技術ARTOOLKIT」と書かれていたりします.

GTE_AR_Frameworkを自社開発しているのであれば,誤解を招かないためにも訂正するように働きかけた方が
良いんじゃないですか?と提案してみたのですが,「コミュニティはうちとは別に関係ないんで。。。」
という反応.これはコミュニティに事実と異なる説明を書いた(かもしれない)人に非がある可能性があるので
何とも言えないですが,対応としてはどうなのかと思った.ARToolKit使ってるって誤解されちゃいますよ?

③カメラの解像度
電脳フィギュア - 製品仕様
Webカメラ(130万画素以上 640x320 30FPS以上推奨)

と書かれていたので,なんで640x320というヘンテコな解像度を採用したのかわからず,
もしかしたら何か技術的な意味があるのか!!と思い質問したところ,単に誤植とのことでした.
スタッフの方が,すぐに訂正しますと言っていたので,そろそろ訂正されていることでしょう.

ということで,結論としては大した情報は得られませんでした.以上です.

第弐回天下一カウボーイ大会に行ってきました.
masayashiくんとも会えました.

お土産のサイバースペースカレーボーイズはこちら.



温めてご飯にかけると,



なんという食欲クラッシャー。。。
食べ物に色は重要なんだなということを心に深く刻み込みました.
肝心の味についてですが,キノコがたくさん入ってて具だくさんでおいしかったです.
ということで,0x0cヶ月後の第参回天下一カウボーイ大会に参加できるはず(多分)

**************
詳しいレビューはcode雑記帳: 第弐回天下一カウボーイ大会参加録
「第弐回天下一カウボーイ大会」Blogまとめ - あいうぃず@準備中で紹介されているサイトが参考になります.
なので,ここからは個人的に気になった発表について感想を.

■水口哲也さん
経歴を交えながらのお話は非常に興味深かったです.
あと,元気という言葉の持つパワーはスゴイと思いました.
#元気=Full Energyというのは独特な感性ですよね.
#素直にfineとしてしまう自分は凡人だなと思った。。。orz

そして,「新しい視点の獲得は新しい意識を生む」という言葉のインパクトは強烈でした.

■オリンパス(株)未来創造研究所
モバイルEye-Trek-慧眼(けいがん)-をブースで体験できることに!!
参加者大興奮.

仕組みがシンプルなので安価で小型化が実現できるみたいですね.
実際に装着させて頂いたところ,軽くて装着が気にならない!!これなら実用的かも.

あと,個人的にHMDって映像に注意を引きつけられることから,現実世界で利用するには
危険な面も持っているよなーと思っていたのですが,現在,人間の行動をセンシングし,
行動に基づく情報提示について研究中とのこと.
また,オープン化のスタンスをとって開発しているそうなので,これからさらに楽しみですね!!

このHMDを体験できただけでもこのイベントに参加する価値があったと思います(個人的に).

■drikinさん
dolipoの開発者.そして,唯一ハンドルネームで名乗られた発表者.
Macでdolipo重宝してます!!
あと,某アニメのキャラクターを例にとった説明が面白かった.

某巨大掲示板でGUIをかぶせただけという批判があったとのことですが,
使い勝手が良くなって,技術を広めることは十分素晴らしいことだと思います.

そして,
・知恵と勇気で勝負しましょう
・みんなの力をちょっとずつ借りる
・なにはともあれ手を動かそう
・恐れずに世に問おう

という言葉は,自分にとってもいろいろ思うところがありました.
難しく考えるよりも手を動かそう!!>自分

■蒲地輝尚さん
男子たるものマシン語だろ!!という言葉が印象的でした.
#個人的にスクリプト言語よりマシン語の方が
#使いこなしている感があって好きです.

あと,昔のCPUの命令セットは今でも使えるということは知らなかった!!
本格的に書いたことが無いので,マシン語を一度しっかり勉強してみたいなーと思いました.

■近藤誠さん@UEI
ついにiPhoneが発売開始--表参道には1000人以上が行列:モバイルチャンネル - CNET Japan
やiPongで有名な方の発表.惹きつける発表で刺激になりました.最後のポエム「私とMacとiPhoneと」も面白かった.
あと,altyパーティでUEI Surfaceについてお話を聞こうと思ったけど見つけられず。。。残念.

************************
全体を通しての感想としては,レベルがかけ離れすぎてて自分ダメダメだ。。。という後ろ向きな思いよりも,
0x0cヶ月後の第参回までにそのギャップを埋めよう!!という気持ちの方が強かったです.目標は高い方が楽しい.

20日に東京に戻ってきました.帰省ピークを過ぎてても新幹線が地味に混んでた.

あと,数年前から実家で飼われている犬です.
半年に一度しか顔を合わせないので相変わらずなつかない。。。(苦笑)


犬@実家


***************
iSightが入力デバイスに! 新タイプのUIライブラリ「touche」がOSSで公開@マイコミジャーナル
という興味深い記事があったので,これから読む予定.公式サイトはこちら
これとTouchlibOpenTouchは関連あるのかな?

あと,touche自体は,FTIRマルチタッチテーブルの指先トラッキングサーバとして機能するみたいですが,
トラッキングの仕組みは単純に明度の高いblobを追跡するみたいなことが書いてあるので,動作を試してみるだけなら
別にテーブルを作らなくても良いかも(赤外カメラをつないでLEDを光らせるとかでできそう).

*****************
8/24(日)に第弐回天下一カウボーイ大会に行ってきます.
masayashiくんも参加するみたいですね.

あと,もち肌ビジネスマン奮闘記: 第弐回天下一カウボーイ大会に参戦します。というエントリ
にもあるように天下一カウボーイ大会に電脳フィギュア ARisのブースが出るみたいなので,
タロタローグ的「電脳フィギュアはどうだった?」レポート。でも最後は芸者東京の文章力を疑って終了!
でも指摘されている「芸者東京サイトとblogでの特許に関する説明の矛盾点」についてお話を聞ければなーと思います.