0
Help us understand the problem. What are the problem?

posted at

updated at

【FileMaker】Rakuten Rapid API経由で画像データをPDFに変換する

さて、今回は画像データをPDFに変換するAPIのご紹介です。
PDF以外にも、テキストデータ、htmlデータに変換できます。
画像でスキャンしたオブジェクトを文書解析する、PDFで保存するなどの時に活用できると思います。
例えば、紙でもらった領収書などをスマホのカメラで撮ったあと、画像解析のAPIにかませてPDFで保存、テキストに解析して自動で会計処理、など利用場面が思い浮かびます。

このOCR Supreme APIRakuten Rapid APIの画像認識カテゴリーのAPIにあります。
Basicプランなら無料でテストできますので、ぜひ使ってみてください。

実装・実行環境

今回はcurlとJSONを使いますので、FileMaker 16以上で実装・実行してみてください。
また、Rakuten Rapid APIのアカウントをすでに取得していることを前提に話を進めていきます。
まだアカウントを取得していない方は、これを機会に取得してみてください。

OCR Supreme API登録

料金プランで、Basicプランをプランを選択してください。
これでAPIが使えるようになります。

APIの確認

エンドポイントページでPOSTする種類から「OCR Image Endpoint 1」を選択します。
「OCR Image Endpoint 2」もありますが、どちらもエンドポイントが違うだけで、動きは同じです。
スクリーンショット 2021-12-18 22.27.37.png

コードスニペットのプルダウンからShell>cURLを選択してcURLでのサンプルコードを確認します。
スクリーンショット 2021-12-18 22.29.09.png

curlの構文を見てみましょう。

curl --request POST \
    --url https://ocr-supreme.p.rapidapi.com/ocr/image \
    --header 'content-type: application/json' \
    --header 'x-rapidapi-host: ocr-supreme.p.rapidapi.com' \
    --header 'x-rapidapi-key: <RAPID API KEY>' \
    --data '{
    "data": "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AABWAAAAKAAAAFYAAABWAAAek91yAyIAAB5fSURBVHgB7J0HsNTEH8dXRUWkSC9Kl65UUWYYBRQEQSyIdBQQlKIoIF3RAdGhIwjjqIhioSqIgDQBQZpSRkSqIjqiSJUOAvLnu/w37+7du/cuud1ckvvuDCSXl2w2n/1l97slv73q1KlTlwQDCZAACZAACZAACZAACZBATASuooCOiRNPIgESIAESIAESIAESIAFJgAKahkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgAKaNkACJEACJEACJEACJEACNghQQNuAxVNJgARIgARIgARIgARIgALagQ1cvHhRnDp1Shw5ckQcOnRI/jt2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v0KAPHv2bDNhwgRz9dVXm99//70q2uDGG280HTt2DAFHTdqwiAS0v3z98ccf7QszdOjQir8wp59+ujn88MO9JabWBPQff/xhevToYb744osCo7hCwKeA9sHXJeT66683Xbp0cR/r/vjhhx+aPfbYo8Ahbj67C9daay3zyCOPmMUXX9x9VZfHn3/+2XTv3t189913Nv3wTML0jjvuMO3atatLhnlIdC3VXyHxpqyfPn26GT58uHnqqacqKqSXXnppM3nyZC9On5CYhmKLBHQGOeFa9cOGDTPPP/98RV4YPDyPPfaYWX311b2kyIfAC8kDPX78eDNw4MACmyQCwKeAxhB6DS6++OJUNnHxAQccYAYMGFCIp95PfAk+3+9UXvMF71m08ZlUQF944YVmv/32yyuGurG7FuqvUDMLr/SDDz5ocHpUyiut+iG7p0ECOju2Nubvv//evjCI6b/++itTMb3//vtbIZVEHDbEUEsCmjzAQ/vnn3/aZCbl41tAM+QnOsQlqV0tWrSwno0llliiYTbW5Wfes969e5tPPvkkVX5z8ZAhQ0yvXr3qkqNLNGXBqaeeah5//HH7VVIBfeihh5qzzjrLRatjDgjktf4KHS3v1Ouvv26uvfZa88ILLxR6dJLWAY2lF0cAQ0nWXnvtxn6mvyUgIAGdAFqSS/7++28rcs477zzz008/FYS0zxfGp8fMh4A+6qijzMknn5wEl7drSAde3rFjx9o40/D2LaAReD179iykNY1td955p9lqq60KcdXzCXnOWHfGvBPgmpTt1ltvbW655RbDu1XPgeEXNCbSBA2JSUOvutfmrf6qLq14d581a5YZPXq0GTdunL0wTXlV6s7yQpcik+57Ceh0/GJfTeXOsA48Oow5cy9L0gq+oQG+hk34ENCbbbaZueeee6oqPl599VVz0EEHFTCl4exbQNOFt+uuu5pvvvnG2ueehYKxMU723HNPc+mllyYWijFulYufMrHy3HPPLdiaNN8RzpqkaQwTM/Egu5CEpzxhjl5+j3mpv/JImDkGo0aNMnfffbc1P0190DD99E5OmTLFrLTSSg3/pM8pCEhAp4CX5lIKoqfmTijAQ+tzaMc666xjK/y0E598COhqe+8YC7vbbruZb7/91mZV2gLJt4CGMT0SCDRCElFiL5z7HwXkE088YVq2bOm+quujT+/+0Ucf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",
    "lang": "eng",
    "output": "pdf"
}'

data

dataの部分は、JSONで指定します。
JSONキーのdataには、Base64EncodeRFCでエンコードした画像の文字列データを指定します。

lang

langは、日本語なら"jpn"を指定します。

もし、正確に他のlang指定も知りたい・活用したい、ということでしたら、"List supported languages"エンドポイントのcurl実行で一覧が得られます。
スクリーンショット 2021-12-18 22.32.35.png

output

outputは、画像データをどの形式で出力するか、以下の3種類が指定できます。
・pdf
・text
・hocr(html)

実装

curl構文もわかったので、実装していきましょう。

テーブル設計

今回は、入力の画像データをocrDataフィールドに、出力されたoutputデータを保存するフィールドをそれぞれ用意しました。
そのほかのフィールドは、追加しなくてOKです。
スクリーンショット 2021-12-18 22.40.30.png

レイアウト

インプットの画像と変換されたデータを保存するフィールドを配置します。
スクリーンショット 2021-12-18 22.45.53.png

入力データであるocrDataフィールドは、データの書式設定で「イメージ」を選択してください。
スクリーンショット 2021-12-18 22.45.25.png

PDF出力フィールドは、データの書式設定で「インタラクティブ」を選択します。
スクリーンショット 2021-12-18 22.45.34.png

html出力は、Webビューワツールを設置します。
スクリーンショット 2021-12-18 22.45.46.png

スクリプト

さて、実際にcurlを指定するスクリプトの作成です。

どの変換もそうなのですが、元の画像データをcurlで送信する際は文字列に変換(エンコード)する必要があります。
Base64EncodeRFCという関数を使います。
"4648"という数値は、RFC番号です。
今回は画像データなので改行コードをつけないRFC番号になります。
画像を変換する際はよく使う、というかこの関数を使うので、是非とも覚えておきたい関数です。

Base64EncodeRFC ( 4648 ; ocrAPI::ocrData )

画像→PDF変換

PDF変換するときのスクリプトステップです。
4,5,7行目は、スクリプトステップで継続して使用しなければ、特に変数にする必要もありませんが、デバッガなどを通すときに変数の値を確認するときに便利なので、変数に格納しました。
スクリーンショット 2021-12-18 23.25.10.png

2行目のdataオプションの編集を拡大してみました。
スクリーンショット 2021-12-19 17.02.48.png
dataとして指定している画像の文字列は、JSONObjectではなく、JSONStringを指定します。
間違えると、変換されて返ってきたデータが正しくありません。

3行目は、いよいよ送信です。
過去のcurl構文でも口を酸っぱくしていっていますが、"'"は、"\""に変換して使ってください。
スクリーンショット 2021-12-19 17.18.24.png

6行目で、返ってきたpdfデータをBase64Decode関数で文字列からオブジェクトデータに変換します。
この時、関数の2つ目の引数でファイル名を指定しますが、拡張子付きのファイル名であれば、インプットの画像ファイル名である必要はありません。
この2つ目の引数を忘れると、デコードが失敗しますので、必ず指定してください。
スクリーンショット 2021-12-19 17.20.26.png

一連の流れは、こんな感じです。

画像→テキストデータ

画像からテキストデータへの変換は、PDFの時とほぼ一緒ですが、違うのは送信時に指定する引数としてoutputが"text"になることです。
また、返ってきたデータは何も変換せずに使用できます。
スクリーンショット 2021-12-18 23.25.24.png

画像→HTML

こちらも、テキストデータ変換と同様です。
送信時の引数としてoutputをHTMLを意味する"hocr"を指定し、同様に返ってきたデータは何も変換しません。
とはいえ、返ってきたHTMLには、見慣れないXML構文も含まっていたので、その部分は今回手動で取り除きました。
何かしら方法があるんだとは思いますが、、、

スクリーンショット 2021-12-19 17.20.26.png

では、これらを実行してみてください!

実行結果

画像→PDF変換

スクリーンショット 2021-12-19 17.31.09.png

画像→テキストデータ

スクリーンショット 2021-12-19 17.31.21.png

画像→HTML

スクリーンショット 2021-12-19 17.31.38.png

HTML変換は、最初の行のxmlの構文がつきますので、ウェブビューアで表示する際は、xml行を削除すると表示できます。
スクリーンショット 2021-12-19 17.32.08.png

文字データに変換されると、変なところに空白が入ってしまうのが「?」な感じですが、おおよそうまくいっている感じですね。

APIでDXをしていきましょ!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?