やりたいこと
Firebaseの画像から文字を解析するサービスをXcodeから利用したいです。
公式のドキュメントが出ており、それ通りにやってみたのですが上手くいきません。
エラーも出ず、何が間違っているのかが分からないので質問させていただきます。
作成したプロジェクトで手を加えた部分は以下になります。
ViewController
1import UIKit 2import FirebaseFunctions 3 4class ViewController: UIViewController { 5 6 lazy var functions = Functions.functions() 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 // Do any additional setup after loading the view. 11 //UIImage(named: "sample1")は手書き文字の書かれた画像 12 guard let imageData = UIImage(named: "sample1")!.jpegData(compressionQuality: 1.0) else { return } 13 let base64encodedImage = imageData.base64EncodedString() 14 15 let requestData = [ 16 "image": ["content": base64encodedImage], 17 "features": ["type": "TEXT_DETECTION"], 18 "imageContext": ["languageHints": ["en"]] 19 ] 20 21 functions.httpsCallable("annotateImage").call(requestData) { (result, error) in 22 if let error = error as NSError? { 23 if error.domain == FunctionsErrorDomain { 24 let code = FunctionsErrorCode(rawValue: error.code) 25 let message = error.localizedDescription 26 let details = error.userInfo[FunctionsErrorDetailsKey] 27 } 28 // ... 29 } 30 // Function completed succesfully 31 guard let annotation = (result?.data as? [String: Any])?["fullTextAnnotation"] as? [String: Any] else { return } 32 print("%nComplete annotation:") 33 let text = annotation["text"] as? String ?? "" 34 print("%n(text)") 35 } 36 } 37} 38 39
AppDelegate
1import UIKit 2import Firebase 3 4@main 5class AppDelegate: UIResponder, UIApplicationDelegate { 6 7 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 8 // Override point for customization after application launch. 9 FirebaseApp.configure() 10 return true 11 } 12 13 // MARK: UISceneSession Lifecycle 14 15 func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { 16 // Called when a new scene session is being created. 17 // Use this method to select a configuration to create the new scene with. 18 return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) 19 } 20 21 func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) { 22 // Called when the user discards a scene session. 23 // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions. 24 // Use this method to release any resources that were specific to the discarded scenes, as they will not return. 25 } 26 27 28}
podfile
1# Uncomment the next line to define a global platform for your project 2platform :ios, ‘10.0’ 3 4target 'manjuutegaki' do 5 # Comment the next line if you don't want to use dynamic frameworks 6 use_frameworks! 7 8pod 'Firebase/Analytics' 9pod 'Firebase/Auth' 10pod 'Firebase/Firestore' 11pod 'Firebase/Functions' 12 13end
実行したところエラーは無く、正しく動けば画像から検出したテキストが出力されるはずなのですが、
コンソールには以下のメッセージのみ表示されます。
2021-04-09 11:53:37.293492+0900 manjuutegaki[3701:1867764] Metal API Validation Enabled
やったこと
基本的にはドキュメント通りに操作しましたが、
FirebaseとGCPのプロジェクト作成手順や、関数のデプロイに問題がある可能性があるので詳しく記載します。
1.GoogleCloudPlatformで新しいプロジェクトを作成する。
2.Firebaseで新しいプロジェクトを作成する(その際、先ほどGCPで作成したプロジェクトを選択し追加)
3.Firebaseの課金設定をBlazeに変更
4.Xcodeで新しいプロジェクトを作成し、FirebaseでそのxcodeプロジェクトのバンドルIDを入力し、アプリを登録
5.4の際にGoogleService-Info.plistをダウンロードし、xcodeに配置
6.GoogleCloudPlatformのプロジェクトの認証情報を開き、APIキーの編集から、APIキーの制限からcloudVisionAPIを選択
*ここでAPIキーにiOSkeyとBrowerkeyの2種類があるのが謎です。2種類とも↑の操作を行いました。
*制限なしにして実行してみましたが、結果は同じでした。
7.ドキュメントにあるfunctions-samplesを適当なフォルダにダウンロードしドキュメント通りのコマンドを実行
*ここでvision-annotate-imageがなく、vision-annotate-imagesならあるのですがドキュメントが間違っている?
8.firebase initコマンドを実行し、選択項目は◉ Hosting: Configure and deploy Firebase Hosting sites、
YES/NOはすべてNO、次にUse an existing project(多分これだったと思います、一番上の選択肢)→Firebaseのプロジェクトを選択
9.最後にfirebase deploy --only functions:annotateImageを実行
すべてエラーなどなく実行できています。
あとは、先述したコードを記述して実行した次第です。
上記の手順で間違っているところがないか、コードの部分でおかしなところがないかなど、
わかる方いましたら、よろしくお願いいたします。
開発環境
Xcode 12.4
Mac 11.2.3
iOS 14.4.2
回答1件
あなたの回答
tips
プレビュー