質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

0回答

1076閲覧

OCR機能(文字認識機能)を使ってレシートの文字列を1行ずつ読み取りたい

taka1030

総合スコア2

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/06/17 08:28

前提・実現したいこと

OCRの機能を使い、レシートから文字を読み取るプログラムを作っている所です。
現時点の目標としては読み取られた文字列を1行ずつ読み取って改行するということです。(改行したことを示すために試しに「>>>」という記号を挿入します)
ですが、処理をするという部分において変数のエラーが出てしまい、処理が行われません。

発生している問題・エラーメッセージ

1行ずつ処理するプログラム↓ try { BufferedReader(ocr.text).use({ reader -> var line: String? = null while (reader.readLine().also({ line = it }) != null) { println(">>>" + line) } }) } catch (e: IOException) { e.printStackTrace() } ocr.text = ocr.text

その中のBufferdReader(ocr.text)の"ocr.text"部分がエラーであり、

Type mismatch.
Required:Reader!
Found:CharSequence!

と表示されます。

該当のソースコード

kotlin

1package com.example.recieptapp_android 2 3//import androidx.exifinterface.media.ExifInterface 4import android.app.Activity 5import android.content.Intent 6import android.graphics.Bitmap 7import android.graphics.BitmapFactory 8import android.graphics.Matrix 9import android.media.ExifInterface 10import android.os.Bundle 11import android.widget.RadioButton 12import androidx.appcompat.app.AppCompatActivity 13import com.example.recieptapp_android.OCRUtil 14import io.realm.Realm 15import kotlinx.android.synthetic.main.activity_main.* 16import kotlinx.android.synthetic.main.activity_yomitori.* 17import java.io.BufferedReader 18import java.io.IOException 19import java.io.StringReader 20 21class Yomitori : AppCompatActivity() { 22 23 private val REQUEST = 0 24 lateinit var ocrUtil: OCRUtil 25 26 private lateinit var realm: Realm 27 28 override fun onCreate(savedInstanceState: Bundle?) { 29 super.onCreate(savedInstanceState) 30 setContentView(R.layout.activity_yomitori) 31 ocrUtil = OCRUtil(applicationContext) 32 button.setOnClickListener { 33 val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) 34 intent.addCategory(Intent.CATEGORY_OPENABLE) 35 36 intent.type = "image/*" 37 startActivityForResult(intent, REQUEST) 38 } 39 } 40 41 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 42 super.onActivityResult(requestCode, resultCode, data) 43 44 if (requestCode == REQUEST) { 45 if (resultCode == Activity.RESULT_OK && data != null) { 46 var bitmapOrigin: Bitmap? = null 47 var bitmap: Bitmap? = null 48 49 val uri = data.data 50 val uri2 = data.data 51 val uri3 = data.data 52 try { 53 uri?.let { 54 contentResolver.openFileDescriptor(it, "r").use { parcelFileDescriptorNullable -> 55 parcelFileDescriptorNullable?.let { parcelFileDescriptor -> 56 val fileDescriptor = parcelFileDescriptor.fileDescriptor 57 bitmapOrigin = BitmapFactory.decodeFileDescriptor(fileDescriptor) 58 contentResolver.openInputStream(it).use { 59 it?.let { 60 val exifInterface = ExifInterface(it) 61 val orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED) 62 val degrees = when (orientation) { 63 1 -> { 0f } 64 3 -> { 180f } 65 6 -> { 90f } 66 8 -> { 270f } 67 else -> { 0f } 68 } 69 val matrix = Matrix() 70 71 val imageWidth = bitmapOrigin?.getWidth() ?: 0 72 val imageHeight = bitmapOrigin?.getHeight() ?: 0 73 matrix.setRotate(degrees, imageWidth.toFloat() / 2, imageHeight.toFloat() / 2) 74 bitmap = Bitmap.createBitmap(bitmapOrigin!!, 0, 0, imageWidth, imageHeight, matrix, true) 75 } 76 } 77 } 78 } 79 } 80 81 bitmap?.let { 82 image.setImageBitmap(it) 83 val langId = radio_group.getCheckedRadioButtonId() 84 val langText = findViewById<RadioButton>(langId).text.toString() 85 86 ocr.text = ocrUtil.getString(applicationContext, it, OCRUtil.Companion.LangType.getLangType(langText).str) 87 88 // 1行ずつ処理するプログラム↓ 89 try { BufferedReader(ocr.text).use({ reader -> 90 var line: String? = null 91 while (reader.readLine().also({ line = it }) != null) { 92 println(">>>" + line) 93 } 94 }) 95 } catch (e: IOException) { 96 e.printStackTrace() 97 } 98 99 ocr.text = ocr.text 100 101 } ?: run { 102 ocr.text = "bitmap is null" 103 } 104 } catch (e: IOException) { 105 e.printStackTrace() 106 } 107 } else { 108 ocr.text = "system error" 109 } 110 } 111 } 112} 113

試したこと

val langId = radio_group.getCheckedRadioButtonId()
val langText = findViewById<RadioButton>(langId).text.toString()
val LineText = ocr.text

ocr.text = ocrUtil.getString(applicationContext, it, OCRUtil.Companion.LangType.getLangType(langText).str) // 1行ずつ処理するプログラム↓ try { BufferedReader(LineText).use({ reader -> var line: String? = null while (reader.readLine().also({ line = it }) != null) { println(">>>" + line) } }) } catch (e: IOException) { e.printStackTrace() }

このように新たにLineTextという変数を使っておきかえてからtryの中に入れましたが、
上記のエラーと全く同じものが出てしまいました。

補足情報(FW/ツールのバージョンなど)

使っている開発環境はこちらになります。
Android Studio 3.6.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問