みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

swiftでOCRを利用したサンプルコードを書いて

http://blog.isana.net/2014/08/ios.html

上記サイトを参考にobjective-Cをswiftに書き換えているのですが、どうしてもエラーが取れない場所があり、困っています。以下に記述するので、回答をお願いします。

import UIKit

class ViewController: UIViewController,UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var Textview: UITextView!
@IBOutlet weak var Imageview: UIImageView!

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func Camera(sender: AnyObject) {
var imagePickerController: UIImagePickerController = UIImagePickerController()
//デリゲート指定
imagePickerController.delegate = self
//トリミング指定
imagePickerController.allowsEditing = true
//カメラの有無確認
if UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Rear){
//カメラ指定
imagePickerController.sourceType = .Camera
}
else {
//アルバム指定
imagePickerController.sourceType = .SavedPhotosAlbum
}
//コントローラ起動
self.presentViewController(imagePickerController, animated: true, completion: nil)
}

func ImagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {

/*ここから
//イメージをメモリに保存
var selectedImage:UIImage
self.selectedImage = info objectForKey:UIImagePickerControllerEditedImage
//イメージビューに画像をセット
self.Imageview.image = self.selectedImage
ここ*/

//親ビューに戻る
self.dismissViewControllerAnimated(true, completion: nil)
//テキストを空に
self.Textview.text = nil

//インジケータ開始
var spinner: UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
spinner.center = CGPointMake(160, 240)
spinner.hidesWhenStopped = true
view.addSubview(spinner)
spinner.startAnimating()

//OCR実行
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { var tesseract: Tesseract = Tesseract(language: "eng")
tesseract.image = selectedImage
tesseract.recognize()
dispatch_async(dispatch_get_main_queue(), {
self.Textview.text = tesseract.recognizedText
spinner.stopAnimating()
})
})
}
}

コメントアウトで示した部分の書き換えがどうしてもわからないです。
また、エラーが出てないだけでうまく動作がしないと思われる部分があれば、教えていただけると助かります。
回答宜しくお願いします。

投稿日時 - 2015-11-25 14:51:58

QNo.9085955

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

No.1の補足の質問について回答します。

> すみません、selectedImageのあるところすべてエラーを吐くのですが、何が間違っているのでしょうか…?

各エラーがどの行で出力されているのか正確な場所を書いてもらわないと
わかりませんが、とりあえず(1)については、No.1で指摘した通り
selectedImageをメソッドの外でプロパティとして定義してないからだと
思います。

プロパティの意味がわからなければ、購入した参考書を読み直すか、
http://blogios.stack3.net/swift/classproperty
とかを参考にしてください。

また、このプロパティを定義する際に、オプショナル型についての
知識もおそらく必要になってくると思います。
というか、swiftを使うなら一番重要な必須知識です。
これも参考書を読み直すか、
http://qiita.com/cotrpepe/items/518c4476ca957a42f5f1
を読んで「!」や「?」の意味を理解してください。

投稿日時 - 2015-11-26 11:16:49

ANo.2

No.1です。

誤記訂正します。

info[UIImagePickerControllerOriginalImage]

info[UIImagePickerControllerEditedImage]

です。

投稿日時 - 2015-11-25 21:12:36

ANo.1

気づいた部分をコメントします。

> var selectedImage:UIImage

元のソースでは、selectedImageは、プロパティとして定義されていますから、
この変数の定義はメソッドの外に書く必要があります。

> self.selectedImage = info objectForKey:UIImagePickerControllerEditedImage

objectForKeyは、NSDictionaryの要素を取得するメソッドですから、
info[UIImagePickerControllerOriginalImage]
と書きます。
(参考)
http://qiita.com/kitanoow/items/9ee68463755c5b59c377

投稿日時 - 2015-11-25 21:07:48

補足

すみません、selectedImageのあるところすべてエラーを吐くのですが、何が間違っているのでしょうか…?
(1)value of type 'view controller' has no member 'selectedImage'
(2)Invalid use of '()' to call a value of non-fiction type 'String'
(3)Cannot assign value of type 'String' to type 'UIImage!'
以上のエラーメッセージがでてきます

投稿日時 - 2015-11-26 05:48:02

あなたにオススメの質問