今日も微速転進

ここではないどこかへ

iOS/iPhone アプリ開発入門書・関連書籍まとめ(Swift 4.x / Xcode 9.x)

今シーズン(?)もアプリ開発入門書市場で激戦が繰り広げられる模様です。

まだ情報が出揃っていないようですが、ひとまず記事化。随時更新しますよってことで。

iOSiPhone)向け、Android向けのどちらについても言えることだけど、古いバージョンの開発ツール向けの書籍が書店で面陳されているのを見ると ものすごくもやもやします。

ましてや改定前の古い版のKindle版が半額で販売されたりするのはどうかと思います*1。 

まだ予約中のものが多いので大手出版社からの入門書が出揃ったあたりで大幅にリライトする予定。

だいたい出揃った?

プログラミング未経験者向け

もしTECHNICAL MASTERシリーズの改訂版が出るならそっちをお勧めしたい。

Swiftビギナーズ倶楽部についてはまだ何もアナウンスがない。

『作って学ぶ iPhoneアプリの教科書 【Swift4&Xcode 9対応』

作って学ぶ iPhoneアプリの教科書 【Swift4&Xcode 9対応】 ~人工知能アプリを作ってみよう! ~(特典PDF付き)

作って学ぶ iPhoneアプリの教科書 【Swift4&Xcode 9対応】 ~人工知能アプリを作ってみよう! ~(特典PDF付き)

 

入門本の著者としては実績のある森巧尚氏の本の改訂版。定番かと言われると違うような気もするけど。

例年通りなら網羅率より分かりやすさ優先というタイプの本。

この版の特色としてCoreMLについてのチャプターが追加される模様。  

出版社のページ:『作って学ぶ iPhoneアプリの教科書 【Swift4&Xcode 9対応】​』購入キャンペーン実施! | マイナビブックス

『たった2日でマスターできる iOSアプリ開発集中講座』

たった2日でマスターできる iOSアプリ開発集中講座 Xcode 9/Swift 4対応

たった2日でマスターできる iOSアプリ開発集中講座 Xcode 9/Swift 4対応

出版社が旧版と違うけど、著者の名前からするとSwiftビギナーズ勉強会関係者による本?。

タイトルはちょっと無理があるんじゃないかと思う*2

昨年の旧版と同じ構成だと仮定すると、おそらくチュートリアル形式で理屈は後でというタイプ。

出版社のページに情報がないので推測だけど操作方法の懇切丁寧さでは一押しのはず。

旧版に関していえばWebページで追加のサンプルやアプリのアップロードも解説されていたり、非常に良心的だった。

何の根拠があって「2日でマスター」なのかは疑問。書いてあるとおりに入力して動いたらそれでいいんだっけ?

まだ発売されてないけど未経験者にお勧めできるだろうと予想。逆に言うとプログラミング経験者にとってはかなりまどろっこしいと予想される。

iPhoneアプリ開発「超」入門 増補第6版 【Swift4 & iOS11完全対応】

11月下旬発売予定。タイトルがちょっとね……。

「絶対」とかタイトルに入れるのはどうかと思うけど定番らしい。

この著者の本は買ったことがない。

カテゴリーとしてはプログラミング未経験者向け。

プログラミング経験あり

プログラミング自体は経験はあるけどiOSアプリは勝手がわからない人向けの本。

『詳細! Swift 4 iPhoneアプリ開発 入門ノート』

Kindle版あり(固定レイアウト)

去年より発売が早いか。

定番。内容の網羅率の高さが特徴。プログラミング経験者向け。

この著者はいい加減な本は出さないので信用していい。

アプリ開発入門本におけるTYPOTYPE-MOONとでもいうべき正誤訂正の多さに定評あり。今度こそは誤字・誤植の類が少ないことを祈らずにはいられない。

704ページとまたページ数が増えた?

サポートサイト:詳細! Swift 4 iPhoneアプリ開発 入門ノート サポートサイト

昨年よりサポートサイトのロゴ(表紙と同じやつ)がカッコよくなった。まだ正誤訂正の記載はなし。

『Swift 4プログラミング入門 』

Swift 4プログラミング入門 iOS 11+Xcode 9対応

Swift 4プログラミング入門 iOS 11+Xcode 9対応

期待の新人というか大型新人?

多分厚みはトップクラス。構成は上記の「詳細! Swift 4 iPhoneアプリ開発 入門ノート」同じような感じ。

違いはカラーかどうかとページ数。プログラミング言語の解説と、UI部品の使い方の説明。

799ページというページ数の関係ですごい分厚さなので現物見たほうがいいと思う。

購入はちょっと勇気がいると思う。

本屋でちらっと見た印象としては、巻末の索引のうち、英数字の項目数が少ない点が気になりました。

それと、この厚みだとブックスタンドにセットできないんじゃないかと危惧しています。

actto BST-02 ブックスタンド(OEM品番:EDH-004)

actto BST-02 ブックスタンド(OEM品番:EDH-004)

洗濯バサミか重めの文鎮が必要そうな気がしました。

黒帯シリーズ

11月下旬発売予定

プログラミング経験者向け。

旧版からの売りはWeb APIを呼び出すサンプル。

紹介されているサンプルのコード記述量*3が多くてやや不評だったみたいだけど、Swift 4 でCodableというプロトコルが追加されたので記述量もかなり減るはず。

中級向け

Swift 3 とSwift 4 の変更点を確認したいのならWeb+DB Press の特集を読むかあとはWeb上のブログ記事を読めばいいと思う。あとはApple の公式。

WEB+DB PRESS Vol.101

実務向けの本

現場のためのSwift4 Swift4.1+Xcode9.3対応

現場のためのSwift4 Swift4.1+Xcode9.3対応

仕事でアプリを作る人が入門書の次に読む本という位置づけ、かな。悪くはなさそう。カメラ関連の解説がない本があったりするので有益だと思うけど、UIImagePIckerではなくAVFoundationを使ったサンプルも載せて欲しかった。

更に本格的に仕事にするなら後述のクラウドファンディングで執筆している本もいいと思う。

MVCからMVVMへ

iOSアプリ開発デザインパターン入門 (技術書典シリーズ(NextPublishing))

iOSアプリ開発デザインパターン入門 (技術書典シリーズ(NextPublishing))

※現物は見ていない。

対象読者として既に入門書を読んだ人(+α)、とはっきり想定している。

スキルアップしたい人

旧版の評判は結構良かったはず。

文法書

詳解 Swift 第4版

詳解 Swift 第4版

出版社サイト:SBクリエイティブ:詳解 Swift 第4版

第3版は電子版リリースされなかったのでこの版も期待薄

固定レイアウトながらKindle 版がリリースされているようです。

詳解 Swift 第4版

詳解 Swift 第4版

クラウドファンディングのやつ

peaks.cc

実務でアプリを作っている人たちならではの視点で書いてくれるはずなので期待していいと思う。


上記はすでにリリースされている。もう一冊、執筆開始決定。

peaks.cc

まとめ

iOSじゃなくてmacOS向けのわかりやすくて内容の充実した本が出て欲しいところですが期待薄*4

Swift 3向けの書籍のうち、改訂版が出るものとそうでないのがあるんですよ、まさに諸行無常

まあSwift 3と4で大きな変化がないとはいってもコードの記述量が大きく減るようなありがたい新機能もあるし、改訂版が出るに越したことはないです。

Xcode が修正案を提示してくれるとはいえ、メッセージは英語なので。


iOSアプリ開発者が増えると中級・上級向けの本も増えるはずなんでMacを買える人はどんどん本買ってアプリ制作にトライしていただきたい。


actto BST-02 ブックスタンド(OEM品番:EDH-004)

actto BST-02 ブックスタンド(OEM品番:EDH-004)


P.S. 分厚い本を読む場合はブックスタンドがあると便利。

*1:去年実際にあった話@Amazon

*2:営業が決めたのかな?

*3:yahoo のWeb APIを呼び出すやつ

*4:例のアレは読みにくいから却下

英語のiOS/iPhone アプリ開発入門書・関連書籍情報(Swift 4.x / Xcode 9.x)

まずは洋書(英語)の方から。

海外勢はSwift 3/ iOS 10の時より動きが早い。

正式リリースされているのはPackt Pubの一部とRay Wenderlich。

Swift 3とSwift 4で言語仕様の差が以前よりは小さいので内容によってはすんなり改訂版がリリースされている感じ。

随時更新予定ということで。

オライリー

DRMフリーの電子版の発売はなくなってしまったけど、紙とKindle はリリースされる模様。

Safari Books Onlineに加入すれば読み放題なんだけど。

Learning Swift, 3rd Edition

サンプルコードのリポジトリはあるけど、まだまだっぽい。

旧版の構成を引き継ぐとすると、数少ないmacOSアプリ向けの情報を含む本になるはず。期待して良さそう。

iOS 11 Programming Fundamentals with Swift

iOS 11 Programming Fundamentals with Swift - O'Reilly Media

Programming iOS 11

Programming iOS 11 - O'Reilly Media

旧版、買ったけどあまり読まなかったが手っ取り早くこういうときどうすんだっけというケースには結構役立ったと思う。

iOS 11 Swift Programming Cookbook

iOS 11 Swift Programming Cookbook - O'Reilly Media

Packt

早々と改訂版出して大丈夫か? まあいつものクォリティなんだろうけど。

Test-Driven iOS Development with Swift 4 - Third Edition

11月リリース予定(Kindle は少し遅れるみたい)。悪くはないけど、iOSアプリ制作+TDDの入門書。旧版はどっちつかずで中途半端な感じだった。

旧版の書評は以下。

a244.hateblo.jp

Learn Swift 4 by Building Applications

Learn Swift 4 by Building Applications

Learn Swift 4 by Building Applications

Swift 4 Protocol-Oriented Programming - Third Edition

なぜか早々と改定してる。そんなにページ数は多くなかったと思う。

Mastering Swift 4

Mastering Swift 4- Fourth Edition

Mastering Swift 4- Fourth Edition

オブジェクト指向のありがたみを体感させるためにサンプルアプリを進化のなぞり返し式に書き換えながら解説していくスタイルだったと思う(うろ覚え)。

Swift 4 Programming Cookbook

Swift 4 Programming Cookbook

Swift 4 Programming Cookbook

旧版の発売が著しく遅延したのにもうリリース?

納得いかないというのが正直な見解。

目次にServer Side 云々とあるけどあまり期待はできなさそう。

Ray Wenderlich

iOS、Androidアプリだけでなくゲーム製作など各種チュートリアル(有料・無料)を掲載しているサイト。

割高だけど内容は濃い。タイトルにバージョン名が入っていない方は毎年バージョンアップされる模様。

Swift Apprentice

store.raywenderlich.com

売り文句によればプログラミング経験がなくても大丈夫らしい(もちろん英語とMacは必要だけど)。

iOS Apprentice

store.raywenderlich.com

iOS 11 by Tutorials

store.raywenderlich.com

iOS 11/Swift 4の新機能など。買ったけどほとんど読めてない。内容はまずまず。

まとめ

今シーズン(?)としてはRay Wenderlichの電子書籍を一冊買ったのでひとまず他は買わないかな。

何より買ったけど読まなかったという前科があるので。

オライリーの"Learning Swift" の改訂版は紙媒体かKindleで買うと思うけど他は保留。


それではまた。

書評:"Test-Driven iOS Development with Swift 3"

どうにか読み終えたので書評記事。

Test-Driven IOS Development with Swift 3

Test-Driven IOS Development with Swift 3

1月の一冊5ドルのキャンペーンで入手。読み始めたのが4月だか5月だか忘れた。

内容は悪くは無いけど、ページ数的に定価で買うのはちょっと物足りない感じだろうと思う。

概要と特徴

iOSアプリ開発を題材に、テスト駆動開発について解説した本。

www.packtpub.com

発売は半年以上前。対象としている環境はSwift /Xcode 8 。

内容を確認したいのであればGoogle Booksでも一部閲覧可能。

books.google.co.jp

200ページ弱で読みやすい。英文もそれほど難しくない。

というか、テストを書いて、テストが成功するようにコードを書く、の繰り返しなので必然的に同じ言い回しが何度も出てくる。


いわゆるRed, Green, Refactoringの繰り返しなので退屈。なんだかんだで写経するとそれなりに時間を食う。

TDDのお作法をXcode+Swift 3 に落とし込んだだけの本と言ってもいい。

Swift固有らしい部分はあまりなく、テストを書く(途中でコンパイルエラーに対処する)、テストがエラーになることを確かめる、コードを書く、テストが成功することを確認する、という流れの通り。

Chapter 1 とChapter 5の後半以外の残りの章はToDoアプリをTDDで作るチュートリアル。

あくまでもstep-by-step方式でTDDの作法に従いつつアプリを開発していくので、特定のトピックごとに方法やノウハウを解説するというスタイルではない。

そのため逆引き系のノウハウ本のような使い方はできない。

本のコンセプトとしては Introduction とか Overview という単語がマッチすると思う。

書いてあること

  • TDDの思想にもとづくの開発の進め方(ワークフローが中心)
  • XCTest を使ったテスト駆動開発(XCUITest も最後にちょっとだけ登場する)
  • 非同期処理に対するユニットテスト(expectationwaitForExpectations
  • Function Test
  • サーバーを使用しないネットワークAPI呼び出しのテスト*1
  • Code Coverage *2
  • Xcode Server を使用したContinuous integration 環境のセットアップ

fastlaneというデプロイツールの初歩的な解説が2ページほどある。

書いてないこと

プログラミング言語の解説本ではないのでSwiftおよびXcodeの説明はなし。

  • UI部品の色や位置のテスト方法
  • カメラ関連のテスト方法
  • CoreData 関連のテスト方法
  • AutoLayout関連
  • 初歩的な内容以外のTDD関連トピック

なお、アプリが完成するところまで完全に解説しているかというと、そんなことはない

Chapter 2. でスクリーンショットが表示されているが、残りは同じ要領でやってみよう、という感じ。

気になる点など

安心の大英帝国クオリティ、ですね。本文がおかしくてもサンプルコードがまともなら問題ない……のか?

メソッド名にアンダーバーが抜けている箇所が後半に何箇所かあったりします。この出版社、他の本も含めて校正が雑すぎではないでしょうか。

Chapter 1

単語の先頭を大文字にするサンプルを提示しているが、なぜかcapitalizedメソッドを使わずにめんどくさい方法を使っている。

実害はないけど。

Chapter 3 (Equatable)

Chapter 3の、"Equatable"の解説箇所で、構造体のメンバ要素のtitleが異なるケースのテストの解説が欠落している(そして==メソッドの実装も言及してない)。

Chapter 4

文中でメソッド名のtest_TableViewIsNotNilAfterViewDidLoad()test_TableView_AfterViewDidLoad_IsNotNil()を混同している…。

ItemListViewControllerTest.swiftに関する解説で、以下の変数宣言に言及がない。サンプルコードを確認すれば済む話だけど。

 var sut: ItemListViewController!

本文に記載のコードの、timestampの秒数が微妙におかしい箇所があるので注意。UNIXエポックからの経過秒数の数字が一致しないのでテストが失敗する。

1456095600.0ではなく1456066800.0*3

Chapter 5

後半ToDoアプリではなく別のサンプルでネットワーク通信とエラー処理。面倒なので写経せず。

Chapter 6

ToDoアプリの続き。途中まで作成したアプリを動かしてみろ、という指示があるが、この時点では必要な記述が抜けているので注意。

addではなくてsaveメソッドの方。


最後のセクションでXCTUITestのサンプルになっているが、ボタンの配置によってはiOSシミュレーター上でボタンがキーボードに隠れてタップできずにテスト失敗ということがあるので注意されたし。

Chapter 7

コード・カバレッジの話と継続的インテグレーション。

自動生成されるメソッドを削除してカバレッジ100%にするノウハウが記載されている。

そんなんでいいのか。

継続的インテグレーションについてはXcode Server (Xcode サービス) の設定方法が解説されてる。

以下の過去記事を参照。

a244.hateblo.jp

Xcode Serverを利用するにはmacOS Server のインストールが必要(この記事参照

その他、疑問点

StoryBoardの要素とコードを関連づけるための@IBOutletで始まる変数宣言に循環参照対策のweak修飾子がついていないが問題いないのだろうか?

この本の特徴として先に変数を宣言しておいてからStoryBoardからドラッグしてアウトレットを関連づけるスタイルなので自動生成される場合と異なり、@IBOutlet ...のようにweak修飾子がついてない。

テスト実行のタイミングでは問題なくても実際のアプリとしてはどうかと思う。


なお、Amazonのレビューで低評価のコメントに著者は日常的にiOSアプリを開発していない云々という批判がある。

コメントとしてはViewControllerUTTableViewDelegateUITableViewDataSourceを疎結合にする際のアプローチについての批判。

Amazon.co.jp: Test-Driven iOS Development with Swift 3 電子書籍: Dr. Dominik Hauser: Kindleストア

iOSアプリ開発のお作法としてどうかという観点と、TDDとしてどうなのか、判断できない。

TDDについて

統合開発環境の世話になりつつ静的型付け言語でTDDやろうとすると、編集中のソースに対するコンパイラの警告とかビルドエラーがうっとおしい。

変数名のタイプミスとかテストで検出できるのはいいけど、もうちょっとどうにかならないものか。

テスト実行結果でRedの表示が出るのはいいけど、統合実行環境のエディタ部分が赤く染まるのはなんかすごく気分が悪い。

TDDをやるには使うフレームワークやライブラリに対するある程度の理解がないとできないという感想。SwiftはPlaygroundがあるからいいけど、試行錯誤用に別枠で検証コードを書かないと辛い。

型情報から入力補完が効くだけまだマシなのか。

TDD関連トピック

Chapter 8で言及されているURL。

まとめ

過去にもテスト駆動開発の本(RSpecとかCucumber)の本を購入したことはあるけど(いわゆる写経込みで)最後まで読みきったのは初。

テスト駆動開発のチュートリアルとしては結構いいと思う。

逆に他の言語でテスト駆動開発をの経験があると物足りないのでは。

テスト自動化のノウハウの面倒な、カメラとセンサとかスマートフォンアプリならではの機能についても解説して欲しかった。

価格から考えて、せめてUIテストの自動化とかもう少し踏み込んだ内容だといいのだけど。


せっかく読み終えたので既存の自作アプリに関してはバグ修正と機能追加からテストを書くようにしたい。

ちょうどWeb+DB PRESS Vol. 99もスマートフォンアプリのテスト(ただしUIテスト)に関する特集なのでそっちも読む予定。

WEB+DB PRESS Vol.99

WEB+DB PRESS Vol.99

  • 作者: ?橋健一,谷口禎英,井本大登,山崎勝平,大和田純,内村元樹,坂東昌哉,平田敏之,牧大輔,板敷康洋,大?浩崇,穴井宏幸,原口宗悟,久田真寛,ふしはらかん,のざきひろふみ,うらがみ,ひげぽん,池田拓司,はまちや2,竹原,片田雄樹,渋江一晃,WEB+DB PRESS編集部編
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/06/24
  • メディア: 大型本
  • この商品を含むブログを見る

それではまた。

*1:あまり詳しくないけど

*2:Xcodeで"Edit Scheme"からTestターゲットのチェックボックスをONにする話

*3:小数点の左の、右から3番目の数字

「英単語Clip』というアプリをリリースしました

タイトルのとおり、です。

英単語Clip

英単語Clip

  • Atsuyoshi SUZUKI
  • 仕事効率化
  • 無料

一言で言うと(英和・英英)辞書を引くのがめんどくさいを解決するアプリ。

当面の間、名称は英単語Clipですが、そのうちしれっと名称変更すると思います。

海外向けの名称がWordPressのテンプレートか何かと被っていて激しく後悔しているところです。

教訓:事前にググってちゃんと調べておきましよう。

開発コードネーム*1のままの方が良かったかな……。

どういうアプリか

英単語Clip はカメラから英単語を読み取るツールです。インストール済みの辞書アプリと連携することで「辞書を引く煩わしさ」を軽減します。

クリップボード経由またはApp Extensionに対応した、任意の英和・英英辞書アプリにOCR機能をプラスできます。

対象の単語にカメラをかざしてボタンを押すだけで切り取りマーカー内の英単語を読み取ることができます。

読み取った単語はメモアプリなどのテキスト系のアプリか、英語系の辞書アプリに送信できます。


また、外部のサーバーと通信しないのでオフラインで動作します。このため機密文書が対象であろうと情報漏洩リスクはありません。

辞書アプリとの連携

前述の通り、App Extension またはクリップボードからの検索に対応した辞書アプリと連携します。

矢印のアイコンをクリックするとアクションの一覧が表示されるので使いたい辞書アプリをタップするだけ、です。

インストールされている辞書アプリが表示されていない場合は下段の「その他」から対象アプリを有効にすると表示されるはず。

辞書アプリとしては物書堂さんのアプリがオススメです。

補足

  • シェイク操作でテキストボックス内の文字を消去
  • カーソル移動はテキストボックスで長押し+ドラッグ

参考:iPhoneのキーボードでカーソルを移動させる3つの方法 | アプリオ

開発関連ネタ

アプリの審査の話

リジェクト一回で通りました。リジェクトの原因はビルド設定の問題でしたが、審査ガイドラインiPad上で動作しない(起動時に落ちる)、IPv6 Onlyのネットワークに対応させろ、とかそんな感じの。

そもそもユニバーサルアプリでもないうえ、アプリケーション自身はネットワークにアクセスしないんですがっていう……。

ユニバーサルアプリでなくてもiPhoneアプリiPad上で(iPhone向けの画面サイズで)動かないとダメらしいです。


結局、Tesseract-OCR-iOSというラッパーライブラリを使う関係で、アプリ全体でビルド時にBitcodeを無効にしないとマズかったようです。

IPv6云々については念のためテストはしましたが無関係。

  • Valid Architectures をarm64オンリーに
  • ENABLE Bitcode : NO(ライプラリのターゲットだけではなくアプリ全体で)

ビルド設定に上記の修正を加えて再提出したらすんなり通りました。

今後の方針

改良案はいくつかあるので来月末までにはバージョン 1.1を出したいと思っています。

あとはほとんど放置状態の他のアプリのテコ入れなど。


それにしても「カメラと文字認識+何か」系は普通に激戦区……。


どこかに青い海はないものですかね。

それではまた。

*1:開発コードネームはWordGrasperだけどWordGraspというソフトウェアはすでにあるみたいだし。どうしたものやら。

SwiftOCRというOCRライブラリを試してみた

某所で紹介されていたSwiftOCRというライブラリ付属のサンプルを試してみたので一応?

Tesseract より高速、省メモリらしい。一応昨年末の時点でSwift 3にも対応している。

一行のテキスト、それもシリアルナンバーのようなランダム英数字に向いているとのこと。

github.com

githubのissueトラッカーを見る限り、複数行のテキストのOCRには対応していない模様。

日本語の解説は以下が詳しい(というか他に発見できず)。

Swiftで書かれたOCRライブラリ「SwiftOCR」をiOS実機で試してみた - Qiita

付属のプロジェクトを試す

まずは付属のサンプルを試す。shu223氏の記事によると、アルファベットの大文字と数字のみ学習した状態とのこと。

$ git clone https://github.com/garnele007/SwiftOCR.git
$ cd example/iOS/SwiftOCR\ Camera/
$ open SwiftOCR\ Camera.xcodeproj

Xcode が起動するので、スキーマSwiftOCR Cameraに切り替えてビルドしてやれば起動する。

f:id:atuyosi:20170311090752p:plain

下記のエラーに遭遇した場合は、プロジェクトナビゲーターの画面から"Provisioning Profile" を設定する。

Signing for "SwiftOCR Camera" requires a development team. Select a development team in the project editor.
Code signing is required for product type 'Application' in SDK 'iOS 10.2'
Code signing is required for product type 'Application' in SDK 'iOS 10.2'
Code signing is required for product type 'Application' in SDK 'iOS 10.2'

実行した結果。

f:id:atuyosi:20170311092018j:plain

薄いグレーの帯状のエリアにテキストが入るようにして"Take Photo"を押すと画面の上部に認識結果のテキストが表示される。

真ん中下のスライダで拡大倍率を調整できる。

“ISBN4"という文字列に対して"TSBN4"になっている。数字の"3"をすんなり読んでくれないなど不安定。

学習ツールと他の文字種

小文字アルファベット

一度Xcodeを閉じて、SwiftOCR\ Trainingに移動。

$ cd ../../OS\ X/SwiftOCR\ Training
$ open SwiftOCR\ Training.xcodeproj

テキストフィールドに文字列が入力されているのでアルファベットの小文字と数字ハイフン、円記号を追加。

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-¥0123456789

書体は"Times New Roman" とは “Tahoma” とかメジャーな英語用フォントのみ。

小文字と記号の一部を追加しておもむろに"Start Training"。終了すると表示が元に戻るので、"Test"を実行。

“Save"をクリックするとデスクトップにOCR-Networkというファイルが出力される。

むやみに書体を増やすと"Test"の時点で認識率が下がる……。

トレーニング時点で79.2%は不満だけどとりあえず小文字対応版のデータをコピーして実機テスト(斜体フォントなし)

$ cp ~/Desktop/OCR-Network ../../../framework/SwiftOCR/OCR-Network

パスは環境に応じて変更。

swiftOCR.swiftの開いて、 recognizableCharactersを修正

public var recognizableCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-¥0123456789"

必ずトレーニングした時と同じ文字列にすること。

f:id:atuyosi:20170312225113p:plain

文字の種類や順序が学習させた時と異なると、"Take Photo"の直後にエラーで落ちる。

f:id:atuyosi:20170312223615j:plain
イマイチ認識できていない上に、単語と単語のスペースを無視している。


f:id:atuyosi:20170312221251j:plain
数字はそこそこ認識するが、小文字との混同が発生している。

ただ、文字を認識した位置と、他の候補の情報を出力してくれるので、前後が数字なら数字の候補を優先するような後処理ロジックを仕込むことは可能。

SwiftOCR.SwiftOCRRecognizedBlob(charactersWithConfidence: [("a", 0.398129016), ("2", 0.382261425), ("3", 0.0667025894)], boundingBox: (262.0, 20.0, 19.0, 27.0)), 

カタカナ

この辺から文字のリストをサクッと借用。

ヒラギノフォントとか游明朝・游ゴシック体あたりを学習させてみた。

「ひらがな」は試す気が起きず。

ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ

長音符(ー)と中黒(・)が抜けているので注意。

f:id:atuyosi:20170312225037p:plain

トレーニングの時点で43%。小書きカナを除去すると改善するはずだけど、それはそれで違う気もする。

全部「ポ」になって使い物にならず。アルゴリズムの限界なのか?

気になった点

  • アルファベットの小文字を学習させると認識率が下がる(例えば"x"と"X"、"v"と”V”など形状が同じで大きさが違うもの)
  • イタリック体を学習させると認識率が下がる(特にBold Italic)
  • 数字とのゼロと小文字の"o"の判別ミス
  • 小文字を学習させると数字の認識率も下がる
  • 文字と文字がくっついていると認識できない
  • 文字と文字のスペースを認識していない
  • 文字列が複数行になっている場合、1行目しか認識しない

最大の欠点は複数行の認識に対応していない点。

まとめ

認識結果が安定しない印象。確かにメモリ消費も少ない。認識対象の文字がアルファベットの大文字と数字、記号の一部に限定できるケースならなんとか使えそう。ただし、二値化処理と行の検出を自力でやる必要がある。

ただ、Tesseract 3.x も単語辞書をオフにしてやれば似たような使い方はできるし、シリアルナンバー用の学習データも存在している*1

Tesseract もバージョン4系はLSTMベースのニューラルネットワークを採用した結果、高速化しているはずなのでリソース消費量だけが長所だとあまりメリットにはならない。


中途半端な記事になってしまったけど今後に期待。

それでは。

*1:Homebrew のtesseactパッケージのオプションで"snum.traineddata"というファイルをダウンロードできる

広告