Skip to content

Commit

Permalink
Merge pull request #2 from bigbamboo-jp/release-1.1.0.0
Browse files Browse the repository at this point in the history
Release 1.1.0.0
  • Loading branch information
bigbamboo-jp authored Dec 23, 2021
2 parents 8059dad + a0d9276 commit 569de0e
Show file tree
Hide file tree
Showing 15 changed files with 189 additions and 114 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
using System.Security.Cryptography;
using System.Text;

namespace Cloud_OCR_Snip.Encryption
namespace Encryption
{
public static class AESThenHMAC
{
Expand Down
2 changes: 1 addition & 1 deletion Cloud OCR Snip/Cloud OCR Snip/Cloud OCR Snip.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<UseWindowsForms>True</UseWindowsForms>
<Copyright>Copyright © 2021 Takuma Otake</Copyright>
<ApplicationIcon>Icons/BlackIcon.ico</ApplicationIcon>
<Version>1.0.1.0</Version>
<Version>1.1.0.0</Version>
</PropertyGroup>

<ItemGroup>
Expand Down
157 changes: 100 additions & 57 deletions Cloud OCR Snip/Cloud OCR Snip/Functions.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,8 @@ private void Next_button_Click(object sender, RoutedEventArgs e)
TranscriptionService.Service transcription_service = Functions.GetTranscriptionService((string)user_settings["transcription_service"]);
user_settings.Add("transcription_service_settings", transcription_service.Settings);
}
// ユーザー設定をアプリ設定の中に入れる
Dictionary<string, object> app_settings = Functions.GetAppSettings();
// ユーザー設定をアプリケーション設定に変換する
Dictionary<string, object> app_settings = Functions.INITIAL_CONFIGURATION_DATA;
Dictionary<string, object> user_settings_storage = app_settings;
List<string> splitted_user_setting_section_keys = Functions.USER_SETTING_SECTION_KEY.Split(":").ToList();
foreach (string key in splitted_user_setting_section_keys.GetRange(0, splitted_user_setting_section_keys.Count - 1))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Windows;
using System.Windows.Controls;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public Import_Page3(Dictionary<string, object> setting_data)
{
InitializeComponent();

// 設定データ(アプリ設定)からユーザー設定を取り出す
// 設定データ(アプリケーション設定)からユーザー設定を取り出す
setting = setting_data;
Dictionary<string, object> user_settings = setting;
List<string> splitted_user_setting_section_keys = Functions.USER_SETTING_SECTION_KEY.Split(":").ToList();
Expand Down Expand Up @@ -65,7 +65,7 @@ private void Inherit_setting_selection_checkbox_Click(object sender, RoutedEvent
/// </summary>
private void Next_button_Click(object sender, RoutedEventArgs e)
{
// 設定データ(アプリ設定)からユーザー設定を取り出す
// 設定データ(アプリケーション設定)からユーザー設定を取り出す
Dictionary<string, object> user_settings = setting;
List<string> splitted_user_setting_section_keys = Functions.USER_SETTING_SECTION_KEY.Split(":").ToList();
foreach (string key in splitted_user_setting_section_keys)
Expand Down
3 changes: 3 additions & 0 deletions Cloud OCR Snip/Cloud OCR Snip/Languages/en-US.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,9 @@ Make sure the password is correct.</sys:String>
<!-- Others -->
<sys:String x:Key="other/multiple_startup_error_message">This application is already running.</sys:String>
<sys:String x:Key="other/multiple_startup_error_title">Error</sys:String>
<sys:String x:Key="other/transcription_error_message">Transcription failed.
Please check your Internet connection, transcription service settings and service status, and try again.</sys:String>
<sys:String x:Key="other/transcription_error_title">Error</sys:String>

<!-- Transcription Service: Google Cloud Vision API -->
<sys:String x:Key="google_cloud_vision_api/explanation">Google Cloud Vision API is a cloud image recognition service provided by Google LLC.
Expand Down
3 changes: 3 additions & 0 deletions Cloud OCR Snip/Cloud OCR Snip/Languages/ja-JP.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,9 @@
<!-- その他 -->
<sys:String x:Key="other/multiple_startup_error_message">このアプリケーションは既に起動しています。</sys:String>
<sys:String x:Key="other/multiple_startup_error_title">エラー</sys:String>
<sys:String x:Key="other/transcription_error_message">文字の読み取りに失敗しました。
インターネット接続、文字読み取りサービスの設定・サービスステータス等を確認して再試行してください。</sys:String>
<sys:String x:Key="other/transcription_error_title">エラー</sys:String>

<!-- 文字読み取りサービス:Google Cloud Vision API -->
<sys:String x:Key="google_cloud_vision_api/explanation">Google Cloud Vision APIはGoogle LLCが提供するクラウド画像認識サービスです。
Expand Down
20 changes: 12 additions & 8 deletions Cloud OCR Snip/Cloud OCR Snip/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ public MainWindow()
{
// 通常の方法で起動した場合、初期設定画面を表示する
new InitialSetting().Show();
notify_icon = new System.Windows.Forms.NotifyIcon();
return;
}
}
Expand Down Expand Up @@ -151,7 +150,9 @@ private void Window_KeyDown(ref MSG msg, ref bool handled)
// 「画面を撮影して文字を読み取る場合のショートカットキー」が押された場合
if (Functions.displaying_shoot == false)
{
#pragma warning disable CS4014 // この呼び出しは待機されなかったため、現在のメソッドの実行は呼び出しの完了を待たずに続行されます
Functions.DetectScreenshotText();
#pragma warning restore CS4014 // この呼び出しは待機されなかったため、現在のメソッドの実行は呼び出しの完了を待たずに続行されます
}
}
else if (hotkey_id == Functions.HOTKEY_ID[01])
Expand All @@ -170,42 +171,45 @@ private void Window_Closed(object sender, EventArgs e)
Disable_hotkey();
ComponentDispatcher.ThreadPreprocessMessage -= Window_KeyDown;
// タスクトレイアイコンを非表示にする
notify_icon.Dispose();
if (notify_icon != null)
{
notify_icon.Dispose();
}
}

/// <summary>
/// タスクトレイアイコンがクリックされた際の処理
/// </summary>
private void Notify_icon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
private async void Notify_icon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
// スクリーンショットを撮影後その画像から文字を読み取る
if (Functions.displaying_shoot == false)
{
Functions.DetectScreenshotText();
await Functions.DetectScreenshotText();
}
}
}

/// <summary>
/// タスクトレイアイコンの「クリップボードの画像から読み取る」アイテムがクリックされた際の処理
/// </summary>
private void Read_from_clipboard_image_item_Click(object sender, EventArgs e)
private async void Read_from_clipboard_image_item_Click(object sender, EventArgs e)
{
// クリップボードから画像を取得してその画像から文字を読み取る
IDataObject cb = Clipboard.GetDataObject();
System.Drawing.Bitmap image = (System.Drawing.Bitmap)cb.GetData(typeof(System.Drawing.Bitmap));
if (image != null)
{
Functions.Result_Show(image, data_source: 2);
await Functions.Result_Show(image, data_source: 2);
}
}

/// <summary>
/// タスクトレイアイコンの「画像ファイルから読み取る」アイテムがクリックされた際の処理
/// </summary>
private void Read_from_image_file_item_Click(object sender, EventArgs e)
private async void Read_from_image_file_item_Click(object sender, EventArgs e)
{
// ユーザーが選択した画像ファイルを読み込んでその画像から文字を読み取る
System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog
Expand All @@ -227,7 +231,7 @@ private void Read_from_image_file_item_Click(object sender, EventArgs e)
// 読み込んだファイルが画像ファイルでない場合
return;
}
Functions.Result_Show(image, data_source: 3);
await Functions.Result_Show(image, data_source: 3);
}
}

Expand Down
6 changes: 3 additions & 3 deletions Cloud OCR Snip/Cloud OCR Snip/Result.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ private async void Retry_button_Click(object sender, RoutedEventArgs e)
WindowState = WindowState.Minimized;
// ウィンドウの最小化が完了するまで待機する
await Task.Delay(200);
if (Functions.DetectScreenshotText() == true)
if (await Functions.DetectScreenshotText() == true)
{
WindowState = previous_WindowState;
}
Expand All @@ -106,7 +106,7 @@ private async void Retry_button_Click(object sender, RoutedEventArgs e)
{
// クリップボードから画像を取得できた場合
Close();
Functions.Result_Show(clipboard_image, data_source: 2);
await Functions.Result_Show(clipboard_image, data_source: 2);
}
break;
case 3:
Expand All @@ -131,7 +131,7 @@ private async void Retry_button_Click(object sender, RoutedEventArgs e)
return;
}
Close();
Functions.Result_Show(file_image, data_source: 3);
await Functions.Result_Show(file_image, data_source: 3);
}
break;
}
Expand Down
10 changes: 5 additions & 5 deletions Cloud OCR Snip/Cloud OCR Snip/Texts.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@
// ・Google.Cloud.Vision.V1
// https://www.nuget.org/packages/Google.Cloud.Vision.V1/

using Google.Api.Gax;
using Google.Api.Gax.Grpc;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

Expand Down Expand Up @@ -44,16 +47,20 @@ internal override Dictionary<string, object> Settings
}
else
{
byte[] api_endpoint_bytes = Functions.Unprotect(Convert.FromBase64String((string)settings["api_endpoint"]));
if (api_endpoint_bytes == null)
{
// APIエンドポイントが設定されていないか設定データが破損している場合
settings["api_endpoint"] = string.Empty;
}
else
if ((string)settings["api_endpoint"] != string.Empty)
{
// APIエンドポイントが設定されている場合
settings["api_endpoint"] = Encoding.UTF8.GetString(api_endpoint_bytes);
byte[] api_endpoint_bytes = Functions.Unprotect(Convert.FromBase64String((string)settings["api_endpoint"]));
if (api_endpoint_bytes == null)
{
// APIエンドポイントの設定データが破損している場合
settings["api_endpoint"] = ".googleapis.com";
}
else
{
// APIエンドポイントの設定データが破損していない場合
settings["api_endpoint"] = Encoding.UTF8.GetString(api_endpoint_bytes);
}
}
return settings;
}
Expand All @@ -64,7 +71,7 @@ internal override Dictionary<string, object> Settings
{
if ((string)value["api_endpoint"] != string.Empty)
{
// 設定データにAPIエンドポイント設定データが含まれている場合
// 設定データにAPIエンドポイントの設定データが含まれている場合
value["api_endpoint"] = Convert.ToBase64String(Functions.Protect(Encoding.UTF8.GetBytes((string)value["api_endpoint"])));
}
}
Expand Down Expand Up @@ -99,7 +106,7 @@ internal override Page GetOptionSettingPage(bool initial_setting)
/// <summary>
/// 指定された画像内の文字を読み取るメソッド
/// </summary>
internal override string DetectText(System.Drawing.Bitmap image, string service_credential)
internal override async Task<string> DetectText(System.Drawing.Bitmap image, string service_credential)
{
// BitmapをGoogle.Cloud.Vision.V1.Imageに変換する
using Stream image_stream = Functions.BitmapToStream(image);
Expand All @@ -117,30 +124,33 @@ internal override string DetectText(System.Drawing.Bitmap image, string service_
context.LanguageHints.Add(language_hints);
}
}
// 呼び出し設定を準備する
const int timeout_seconds = 10;
CallSettings call_settings = CallSettings.FromExpiration(Expiration.FromTimeout(new TimeSpan(0, 0, timeout_seconds)));
// クライアントを準備する
Google.Cloud.Vision.V1.ImageAnnotatorClientBuilder builder = new Google.Cloud.Vision.V1.ImageAnnotatorClientBuilder
{
JsonCredentials = service_credential
};
byte[] api_endpoint_bytes = Functions.Unprotect(Convert.FromBase64String((string)settings["api_endpoint"]));
if (api_endpoint_bytes != null)
if ((string)settings["api_endpoint"] != string.Empty)
{
// APIエンドポイントが設定されている場合
builder.Endpoint = Encoding.UTF8.GetString(api_endpoint_bytes);
byte[] api_endpoint_bytes = Functions.Unprotect(Convert.FromBase64String((string)settings["api_endpoint"]));
if (api_endpoint_bytes == null)
{
// APIエンドポイントの設定データが破損している場合
builder.Endpoint = ".googleapis.com";
}
else
{
// APIエンドポイントの設定データが破損していない場合
builder.Endpoint = Encoding.UTF8.GetString(api_endpoint_bytes);
}
}
Google.Cloud.Vision.V1.ImageAnnotatorClient client = builder.Build();
// 画像内の文字を読み取る
Google.Cloud.Vision.V1.TextAnnotation result = client.DetectDocumentText(image_, context);
if (result == null)
{
// 文字読み取りに失敗した場合
return string.Empty;
}
else
{
// 文字読み取りに成功した場合
return result.Text;
}
Google.Cloud.Vision.V1.TextAnnotation result = await client.DetectDocumentTextAsync(image_, context, call_settings);
return result.Text;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -140,16 +140,25 @@ private void Load_settings()
language_hints = new ObservableCollection<string>(language_hints_section);
language_hint_list_view.DataContext = language_hints;
// APIエンドポイント
byte[] api_endpoint_bytes = Functions.Unprotect(Convert.FromBase64String((string)settings["api_endpoint"]));
if (api_endpoint_bytes == null)
if ((string)settings["api_endpoint"] == string.Empty)
{
// APIエンドポイントが設定されていないか設定データが破損している場合
// 設定されていない場合
api_endpoint_text_box.Text = string.Empty;
}
else
{
// APIエンドポイントが設定されている場合
api_endpoint_text_box.Text = Encoding.UTF8.GetString(api_endpoint_bytes);
// 設定されている場合
byte[] api_endpoint_bytes = Functions.Unprotect(Convert.FromBase64String((string)settings["api_endpoint"]));
if (api_endpoint_bytes == null)
{
// 設定データが破損している場合
api_endpoint_text_box.Text = ".googleapis.com";
}
else
{
// 設定データが破損していない場合
api_endpoint_text_box.Text = Encoding.UTF8.GetString(api_endpoint_bytes);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows.Controls;

namespace TranscriptionService
Expand Down Expand Up @@ -58,7 +59,9 @@ internal virtual Page GetOptionSettingPage(bool initial_setting)
/// <summary>
/// 指定された画像内の文字を読み取るメソッド
/// </summary>
internal virtual string DetectText(System.Drawing.Bitmap image, string service_credential)
#pragma warning disable CS1998 // 非同期メソッドは、'await' 演算子がないため、同期的に実行されます
internal virtual async Task<string> DetectText(System.Drawing.Bitmap image, string service_credential)
#pragma warning restore CS1998 // 非同期メソッドは、'await' 演算子がないため、同期的に実行されます
{
return null;
}
Expand Down
Loading

0 comments on commit 569de0e

Please sign in to comment.