個人での特許出願のために必要なプロセス(1) - 識別番号取得編
去年、ウィッチクライドネタで特許を個人出願したので、そのお話をたぶん3回くらいにわけて記述しようと思います。
あ、ウィッチクライドはこちらです。プレイしてね。
ウィッチクライド ~君の声が魔法となる~を App Store で
インターネット出願の流れ
初めて(インターネット)出願する場合のスキーマについてざっと紹介。
電子証明書をゲットする
申請人登録を行い、識別番号を取得する
提案書ひな形ファイルをダウンロードして、ガイドラインに沿って提案書を作成する
出願費用を支払って、提案書に納付番号を記載する
インターネット出願アプリで出願を行う
6-a. 記載不備がある場合は修正して再度出願
とりあえず今回は3まで。
ちなみに、1~3で最短3日くらいですが、長いと2週間はかかりますので注意。
電子出願サポートソフト
大抵の場合は問題ないと思いますが、OSが入れ替わってそれほど時間が経っていない場合、出願ソフトがサポートしておらず、インストールできないという事態が発生しますので注意してください。
実は、当時Windows10に入れ替えてしまったために、Windowsマシンにインストールできませんでした。
Windows10出たばかりというわけでもなかったんですけどね。対応は結構遅いという印象です。
まあ、Macも持っているのでなんとかなりましたが、Windowsマシンしか持っていない場合、OS入れ替えに注意しましょう。
電子証明書をゲットする
次に、電子証明書を手に入れる必要があります。なんで?というと、申請人登録に必要なためです。
ジャパンネットやセコムトラストシステムズなどから購入するか、マイナンバーカードに入っている電子証明書を提出するか、どちらか必要です。
購入する場合、2年で15000円くらいします。今ならマイナンバーカードがおすすめです。
マイナンバーカード、持ってますよね?持っていないなら申請して取得する必要があります。
マイナンバーカードの中に電子証明書があるので、カードリーダーで読み取って保存しましょう。
カードリーダーは、ヨドバシなどの家電量販店で普通に購入できます。3000円くらいです。
ちなみに、私はマイナンバーカードではなくジャパンネットのDIACERTを購入しました。
というのも、すでにマイナンバーカードはシステムとしてはありましたが、申し込みが殺到しすぎて、半年待ちなために諦めてしまいました。
識別番号を取得する
識別番号は出願者のIDです。1回取れば、2回目以降は同じ識別番号を使えばOKです。
電子証明書さえ取得すれば、識別番号の取得は手続きをするだけです。
インストールしたツールの中に、「申請人情報・証明書管理ツール」というアプリがありますので、それを起動して識別番号取得を行います。
”識別番号取得&利用登録”を選択して、ガイドに従って記入していきます。
識別番号の発行は、すぐに行われたような気がします、が、すいませんあまり記憶にないです。
ちなみにそのうちハガキも届きます。
次の記事
AIビジネスに騙されないために1つだけおさえておきたいポイント
昨今、AIビジネスが盛況です。猫も杓子もAIです。
そのおかげで、「ウチはAIやってます。アドバイスできます。」とか、「ウチはAIのツールを作っています。使ってください。」とか、 そういう類の営業を結構うけました。
いろいろ話を聞いているうちに、AIが、よくわかっていない老人を騙す単語になってないかと、ちょっと心配になってきました。
AI営業の持ってくる話
先方が、「1か月以内にキャンペーンを打つと、高い広告効果の見込める顧客を、顧客行動データから抽出します。そのために、1年分の顧客行動データを1000人分利用して、最適な特徴量抽出、モデルの選定・構築を行います。1年分とした理由、および1000人で十分であるとした理由は・・・」などの具体的な話を提示してくることは、稀です。
すいません、稀というか1件もありませんでした。
大体はツールかシステムの話です。
ツールを使うと簡単にAIが導入できるとか、うちのシステムを使うと、IoTデバイスからのデータを簡単に分析できるとか、そういう話ばかりです。
ツールを使うと、どれくらいAIを用いたビジネスが楽になるのでしょう?少なくとも楽になるのは確かだと思いますが、それは全体の何%を改善するものなのでしょう?
その辺のツボを押さえていないと、普通は導入の判断ができません。ところが、なぜかお金を払ってしまう人がいるのが”AI”という言葉の不思議です。
AIという単語の捉え方が、人によって解釈がてんでバラバラなことも原因ではないかと思います。
1つだけおさえておきたいポイント
さて、本題です。
話を持ってきた人に、CRISP-DMに基づいて質問をすることをお勧めします。
CRISP-DMとは、CRoss-Industry Standard Process for Data Miningの頭文字を取ったもので、その名の通り、データマイニングの標準的なプロセススキーマを定義したものです。
そう、データマイニングです。AIという10人に聞けば10人違う答えが返ってくる謎ワードではありません。
検索すればいくつかヒットすると思いますので、詳細はそちらを確認していただくのが良いと思います。ここでは概要だけ。
CRISP-DMは、データマイニングプロセスとして、6つのフェーズを定義しています。それぞれのフェーズについて、簡単で乱暴な解説 もつけておきます。
フェーズ1:ビジネスの状況の把握 →そもそもデータ解析した結果、カネになりそうなのか フェーズ2:データの理解 →データ解析に必要なデータは足りてるのか、使えるのか フェーズ3:データの準備 →集めたデータを綺麗に(欠損値処理、正規化など) フェーズ4:モデル作成 →いわゆる人工知能ってここを指してる フェーズ5:評価 →モデルは十分な性能があるのか(=理論通りカネになりそうなのか) フェーズ6:展開/共有 →具体的にビジネスに利用(ダイレクトメール送るなど)
CRISP-DMの特徴は、ビジネスの視点がある点と言われることがあります。これは非常に重要だと思います。
例えば、犬画像識別器を作りましょうとぶち上げたところで、変な顔されるのがオチです。理由は「くだらないから」ではなく、大抵の企業では、その技術はお金にならない可能性が高いためでしょう。
さて、「ツール」や「システム」はこれらのフェーズのどこに含まれるでしょう?大抵はフェーズ4(の一部)、もしかするとフェーズ3も入るかも、といったところです。
全体のプロセスから考えると、ほんの一部ですよね。さらに、ほかのフェーズはサポートすら期待できないか、たぶん追加料金を取られます。
話を持ってきた人が、どのフェーズまでカバーする気なのか(できるのか)、それとなく聞いてみることをお勧めします。
そしてフェーズ4もツールやシステムを導入したからといって一筋縄にはいきません。
モデル作成は泥臭い
モデルの作成はめちゃくちゃ泥臭い作業です。
大抵の場合、ビッグデータを処理することになるのではないかとおもいますが、このビッグデータが厄介で、モデルの構築のために、大量のデータを食わせてモデルの学習をさせることになります。
簡単に言えば、めちゃくちゃ時間がかかります。
おそらく、HadoopやらSparkやらの分散処理システムを組まないと、やってられなくなります。
CudaなどのGPGPUを当てにするなら、グラボも頭に入れる必要があります。
(いやいや、今ならクラウド上でやればいいですよね、と言う人がいたら、その人はきっと石油王です。)
そして、絶対に一発でうまくいくことはありません。
ハイパーパラメータの調整、モデル自体の変更、理論の組み換え、欠損値処理や正規化の変更、利用するデータの変更や拡大など、やることはめちゃくちゃあります。
1つ直してまた計算です。バグ入れると泣きます。バグが数値計算由来だと、バグっていることにすらしばらく気づかないことがあります。
ちなみにDeep Learningだと簡単になるとか、そんなことはないです。「特徴量抽出」という作業が不要になりますが、中間層の学習にめちゃくちゃ時間がかかります。
自作ゲーム「ウィッチクライド」の魔法認識エンジンは、特徴量抽出からの判別をしています。 作成に当たっては、やっぱり泥臭い作業はかなり発生しました。
ということで
AIという謎ワードより、CRISP-DMという単語を覚えておいた方が遥かに有用です。
別にフェーズを丸暗記する必要はないので、AI系の営業と相対するときに、メモを忍ばせておくとよいでしょう。
予約投稿とPixivの貼り付けテスト
息抜きがてらに智絵里をドロー。 予約投稿とPixivの貼り付けテスト。
シアーハートアタックの状態遷移設計
ラズパイで作ったシアーハートアタックの状態遷移がどうなっていて、どう実現しているのかというソフトウェアサイドのお話です。
ソフトウェアの話はいいかーと思っていたのですが、そりゃ自分がソフト屋だからかなあと思い直して文章を書いた次第。
シアーハートアタックについてはこちらをどうぞ。
状態遷移概要
図にしました。その方が説明早いので。
図の通り、全部で4状態です。
停止状態
ジッと黙っている状態です。
かといって何もしていないわけではなく、室温とターゲット温度の差分を取って、熱源がないかチェックしています。
発見状態
熱源を検知している状態です。モーター回して前進します。
前進中も、熱源チェックは継続します。
なお、停止状態から遷移した場合は、LEDランプを光らせて、「コッチヲ見ロッ!」と喋ります。
ロスト直後
前進中に熱源をロストした状態です。1秒程度静止します。
その間に熱源を再検知した場合は、そのまま発見状態へ戻ります。
完全にロストした場合は、探索状態へ遷移します。
探索
超信地旋回で、熱源を探します。
発見したら発見状態へ、旋回しても見つからなければ、停止状態に移行します。
ソフト設計
上記の通り、そんな複雑ではないです。が、それでも適当にif文で書くと、めちゃくちゃ苦労します。
状態管理と言えばStateパターン。ということで、Stateパターンを使って実装しました。
Stateパターンの親クラスは、こんな感じで実装してました。
STATE_IDLE = 0 STATE_LOST = 1 STATE_LOSTTURN = 2 STATE_FIND = 3 STATE_STAY = 255 class SuperState: #static thermo_ = None # 初期化メソッド # @param mystate_id 自分のステート番号 def __init__(self, mystate_id): self.mystate_ = mystate_id # 自Stateに切り替わった時に呼び出されます # @param prev_state 直前のState def enterState(self, prev_state): pass # 状態をチェックして、次に遷移すべきStateを決定します # @return 次State (STATE_STAYの場合は据え置き) def check(self): return STATE_STAY # 自分のステートIDを返します。 def mystate(self): return self.mystate_
このステートを保持している側の動作は、以下のようになっています。
def main(): state_ = state.StateIdle() state_.enterState(state.STATE_IDLE) while(True): current_state = state_.mystate() next_state = state_.check() if next_state == state.STATE_STAY: time.sleep(0.5) continue elif next_state == state.STATE_FIND: state_ = state.StateFind() elif next_state == state.STATE_LOST: state_ = state.StateLost() elif next_state == state.STATE_LOSTTURN: state_ = state.StateLostTurn() elif next_state == state.STATE_IDLE: state_ = state.StateIdle() state_.enterState(current_state) time.sleep(0.10)
やっていることは非常に単純です。
現在のステートクラスに対して、次に何のステートにするかをチェックさせます(→checkメソッド)。
もし、STATE_STAYならばそのまま継続。別のステートなら、その対応ステートクラスをインスタンス化して、enterStateを呼び出します。
この動作を延々と繰り返しているだけです。
各ステートクラスに次状態の脳みそを持たせているため、上記main()関数内は、機械的にステートIDに対応するインスタンスを生成するだけになっています。
この仕組みに従って、具象Stateクラスを実装すればいいだけです。
例えば、発見状態(STATE_FIND)なら、こんな疑似コードになります。
def enterState(self, prev_state): # if prev_stateがSTATE_IDLEなら: LED点灯、コッチヲ見ロッと発声 # モーターを前進モードにして回転 def check(self): # if 室温と赤外線温度が所定値未満: return STATE_LOST # そうでなければそのまま継続→ return STATE_STAY
シンプル。2つのメソッドを実装すればいいだけです。
後はモーター制御だったり、LED点灯だったり、温度センサーだったりのアクセス手段を用意すれば終わり。
センサー系制御やると、状態管理が結構必要とされることが多いので、Stateパターンを使うと大変楽になれると思います。
Raspberry piを乗っけて超信地旋回する
この前作ったシアーハートアタックは、熱源探索するために、その場で回転する動作をプログラムしています。
キャタピラの旋回
そもそもキャタピラで旋回ってどうやるのか、これ作る前は知らなかったんですが、片側のキャタピラを止めて軸回転する信地旋回と、キャタピラを互いに逆方向に回転する超信地旋回(極地旋回)の2通りがあるんですね。
超信地旋回をするには
要するに、超信地旋回するには、片方を順方向、片方を逆方向に回転するよう、モータ制御をすればいいわけです。
今回はそのモータ制御を、DRV8835というモータドライバを使って制御しました。秋月なら1つ300円で買えます。秋月の受け取りが面倒くさいなら、Amazonでも600円くらいしますが売ってます。
配線
配線はこんな感じです。
ざっくり左側がラズパイ、右側がモーターです。モーターの方は見たまんまです。モーター用の電源と、モーターA, Bの2つを接続しています。VMMは今回は使っていません。モーターAを右車輪用、モーターBを左車輪用にして、片方を順回転、もう一方を逆回転させて超信地旋回を行います。
ラズパイは、3.3VとGND、それからGPIOへ4本接続しています。どこでもいいのですが、私は17,27,22,23を使いました。
MODEは、HIGHを入れるとモータ制御がPHASE+ENABLEに、LOWにするとPWM制御になります。今回はHIGHを入れます。ENABLEはモーターをそもそも回すか回さないか、PHASEはHIGH/LOWで順回転、逆回転が変わります。なので、超信地旋回するためには、ENABLEを両モーターともHIGH, PHASEは片方のモーターをHIGH, 片方のモーターをLOWにすれば超信地旋回ができます。
ENABLEを片方止めると信地旋回になります。
超信地旋回の注意点
結構パワーが要ります。ギア比に注意。
スピード重視のギア比にすると、ボディーが重いと全く旋回しなくなります。
また、履帯が外れたり、脱輪したりすることがあります。
動画
ボディーはタミヤのユニバーサルプレートに、ツインモーターボックスとタンク工作基本セットを使用。
さらに、ラズパイとモータードライバー、モーター用電池、ラズパイ用電源(リポバッテリ充電器)が乗ってます。
MLX90614をRaspberry piで使う
前回紹介したシアーハートアタックの熱源探知には、赤外線温度センサーを使用しています。
赤外線温度センサーは、非接触で対象物の温度を測ることのできる温度計です。
今回使用したのは、MelexisのMLX90614という赤外線温度センサーです。
正確に測定するには5cmくらいの距離じゃないとダメですが、
多少離れていても、「なんか熱源がある」くらいは検出できます。
例えば、50cmくらい離れた場所に人がいた場合、室温よりは1℃くらい高くなります。
(レンズを使用したりすると、もっと伸びるかもしれません。)
3.3V(5V品もあるので注意), I2Cで制御可能ということもあり、ラズパイでもArduinoでも扱いやすい。
検出温度のレンジは-40~125℃ほど。
ただ、赤外線温度センサーって高いんですよね。
MLX90614は単価2200~3000円くらいです。壊したら泣きます。
ちなみに私は千石電商で2800円で買いました。
評価ボード付きだと7000円くらいですが、素で十分扱えます。
Amazonでは、ノーブランド品が\690で売ってるみたいです。
ふーん、これでもよかったかもしれない。
色々調べると、結構安値のものがありますね。ムムム。
例えば、多くの電子部品を安値で販売しているHiLetGoも、赤外線温度センサーを販売している模様。\430也
ちなみに、赤外線温度センサーには、4x4とか8x8とか、点ではなく2Dでデータを取れるものがあります。
こういう2Dセンサーをアレイセンサーと呼んだりします。値段は少々高めです。
買いやすいところではOMRONのD6TとかGrid-Eyeとか。
下の画像はOMRONのD6T-L44です。Grid-EyeはRSオンラインから買えます。
とりあえず、MLX90614の話に戻ります。
Raspberry piで扱う
ラズパイで扱う、というよりI2Cでどう扱うかという話がメインになります。
脚が4本で、Vdd, GND, SCL, SDAと、実に普通のI2Cです。
対応するラズパイのGPIOピンに差すだけです。SlaveAddrは0x5a。
$ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- 5a -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
ここまではいいのですが、MLX90614のプロトコルはちょっとした癖があるので、適当にreadを試みても失敗します。
データの読み込み
データシート(これがまためちゃめちゃ分厚い)の8.4.3.1.1あたりですかね。
こんな風に書いてあると思います。
1 7 1 S|Slave Address|Wr|..(略)
これの意味するところは、Slave Addressは7bitで書いてください、ということです。
0x5a=0101 1010を表現するには、1bit左にシフトして、1011 0100=0xb4としなければなりません。
読み込みデータは、8.4.3.1.1にも、以下の文章、
If the access to the MLX90614 is a read operation it will respond with 16 data bits and 8 bit PEC only if its own slave address,
にも書いてある通り、Data-High, Data-Low, PECの3octetです。
The PEC is a CRC-8 with polynomial X8+X2+X1+1. T
ということで、PECはCRC-8です。誤り制御用なので、ホビー用途なら捨てても構わないと思います。
一度に3Byte読む必要があるので、SMbusのread_i2c_block_dataで読み込みましょう。
レジスタアドレスは0x7なので、
bus = smbus.SMBus(1) t = bus.read_i2c_block_data(0xb4, 0x7, 3)
で読み込めます。なお、アドレス0x6を読むと、外気温が取れます。
シアーハートアタックでは、0x7と0x6の差分を取って熱源判定をしています。
熱源に向かって自走するシアーハートアタックを作った
ジョジョの奇妙な冒険第4部に登場する、遠隔操作型のスタンド「シアーハートアタック」を自作しました。
シアーハートアタックとは
というシロモノです。
爆発は無理ですが、
- 熱源に向かって自走する
- キャタピラで駆動
- 「コッチヲ見ロッ」と喋る
この辺の設定を守って製作してみました。
造形は初めてなので、かなりボッコボコです。 これでもやっているうちに作り方を覚えて、大分マシになりました。