Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.CognitiveServices.Language.TextAnalytics" Version="4.0.0" />
<PackageReference Include="Microsoft.Azure.CognitiveServices.Vision.ComputerVision" Version="5.0.0" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.1" />
</ItemGroup>
<ItemGroup>
Expand Down
83 changes: 83 additions & 0 deletions src/Functions/SantaTalk.Functions/ScanSanta.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models;
using System.Text;

namespace SantaTalk.Functions
{
public static class ScanSanta
{
static ComputerVisionClient visionClient;
private const int numberOfCharsInOperationId = 36;

static ScanSanta()
{
var keys = new ApiKeyServiceClientCredentials(Environment.GetEnvironmentVariable("ComputerVisionAPIKey"));

visionClient = new ComputerVisionClient(keys) { Endpoint = Environment.GetEnvironmentVariable("ComputerVisionAPIEndpoint") };
}

[FunctionName("ScanSanta")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] Stream image,
ILogger log)
{
var mode = TextRecognitionMode.Handwritten;
var text = string.Empty;

try
{
var result = await visionClient.RecognizeTextInStreamAsync(image, mode);
text = await GetTextAsync(result.OperationLocation);
}
catch (Exception ex)
{
log.LogError(ex.ToString());

return new StatusCodeResult(StatusCodes.Status500InternalServerError);
}

return new OkObjectResult(text);
}

private static async Task<string> GetTextAsync(string operationLocation)
{
var operationId = operationLocation.Substring(
operationLocation.Length - numberOfCharsInOperationId);

var result = await visionClient.GetTextOperationResultAsync(operationId);

int i = 0;
int maxRetries = 10;

while ((result.Status == TextOperationStatusCodes.Running ||
result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries)
{
await Task.Delay(1000);
result = await visionClient.GetTextOperationResultAsync(operationId);
}

var sb = new StringBuilder();

foreach (var line in result.RecognitionResult.Lines)
{
foreach (var word in line.Words)
{
sb.Append(word.Text);
sb.Append(" ");
}

sb.Append("\r\n");
}

return sb.ToString();
}
}
}
28 changes: 28 additions & 0 deletions src/SantaTalk.Android/MainApplication.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
using System;

using Android.App;
using Android.Runtime;

using Plugin.CurrentActivity;

namespace SantaTalk.Droid
{
#if DEBUG
[Application(Debuggable = true)]
#else
[Application(Debuggable = false)]
#endif
public class MainApplication : Application
{
public MainApplication(IntPtr handle, JniHandleOwnership transer)
: base(handle, transer)
{
}

public override void OnCreate()
{
base.OnCreate();
CrossCurrentActivity.Current.Init(this);
}
}
}
11 changes: 9 additions & 2 deletions src/SantaTalk.Android/Properties/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.codemilltech.santatalk">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.codemilltech.santatalk" android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<application android:label="SantaTalk.Android" android:networkSecurityConfig="@xml/network_security_config"></application>
<application android:label="SantaTalk.Android" android:networkSecurityConfig="@xml/network_security_config">
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>
</provider>
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
Loading