diff options
Diffstat (limited to 'src/client/cognitive_services/CognitiveServices.ts')
| -rw-r--r-- | src/client/cognitive_services/CognitiveServices.ts | 46 | 
1 files changed, 10 insertions, 36 deletions
| diff --git a/src/client/cognitive_services/CognitiveServices.ts b/src/client/cognitive_services/CognitiveServices.ts index bbc438a9b..c118d91d3 100644 --- a/src/client/cognitive_services/CognitiveServices.ts +++ b/src/client/cognitive_services/CognitiveServices.ts @@ -1,15 +1,11 @@  import * as request from "request-promise";  import { Doc, Field, Opt } from "../../new_fields/Doc";  import { Cast } from "../../new_fields/Types"; -import { ImageField } from "../../new_fields/URLField"; -import { List } from "../../new_fields/List";  import { Docs } from "../documents/Documents";  import { RouteStore } from "../../server/RouteStore";  import { Utils } from "../../Utils"; -import { CompileScript } from "../util/Scripting"; -import { ComputedField } from "../../new_fields/ScriptField";  import { InkData } from "../../new_fields/InkField"; -import { undoBatch, UndoManager } from "../util/UndoManager"; +import { UndoManager } from "../util/UndoManager";  type APIManager<D> = { converter: BodyConverter<D>, requester: RequestExecutor, analyzer: AnalysisApplier };  type RequestExecutor = (apiKey: string, body: string, service: Service) => Promise<string>; @@ -42,7 +38,7 @@ export enum Confidence {   */  export namespace CognitiveServices { -    const executeQuery = async <D, R>(service: Service, manager: APIManager<D>, data: D): Promise<Opt<R>> => { +    const ExecuteQuery = async <D, R>(service: Service, manager: APIManager<D>, data: D): Promise<Opt<R>> => {          return fetch(Utils.prepend(`${RouteStore.cognitiveServices}/${service}`)).then(async response => {              let apiKey = await response.text();              if (!apiKey) { @@ -103,15 +99,15 @@ export namespace CognitiveServices {                  return request.post(options);              }, -            analyzer: async (target: Doc, keys: string[], service: Service, converter: Converter) => { +            analyzer: async (target: Doc, keys: string[], url: string, service: Service, converter: Converter) => {                  let batch = UndoManager.StartBatch("Image Analysis"); -                let imageData = Cast(target.data, ImageField); +                  let storageKey = keys[0]; -                if (!imageData || await Cast(target[storageKey], Doc)) { +                if (!url || await Cast(target[storageKey], Doc)) {                      return;                  }                  let toStore: any; -                let results = await executeQuery<string, any>(service, Manager, imageData.url.href); +                let results = await ExecuteQuery<string, any>(service, Manager, url);                  if (!results) {                      toStore = "Cognitive Services could not process the given image URL.";                  } else { @@ -122,6 +118,7 @@ export namespace CognitiveServices {                      }                  }                  target[storageKey] = toStore; +                  batch.end();              } @@ -129,31 +126,6 @@ export namespace CognitiveServices {          export type Face = { faceAttributes: any, faceId: string, faceRectangle: Rectangle }; -        export const generateMetadata = async (target: Doc, threshold: Confidence = Confidence.Excellent) => { -            let converter = (results: any) => { -                let tagDoc = new Doc; -                results.tags.map((tag: Tag) => { -                    let sanitized = tag.name.replace(" ", "_"); -                    let script = `return (${tag.confidence} >= this.confidence) ? ${tag.confidence} : "${ComputedField.undefined}"`; -                    let computed = CompileScript(script, { params: { this: "Doc" } }); -                    computed.compiled && (tagDoc[sanitized] = new ComputedField(computed)); -                }); -                tagDoc.title = "Generated Tags"; -                tagDoc.confidence = threshold; -                return tagDoc; -            }; -            Manager.analyzer(target, ["generatedTags"], Service.ComputerVision, converter); -        }; - -        export const extractFaces = async (target: Doc) => { -            let converter = (results: any) => { -                let faceDocs = new List<Doc>(); -                results.map((face: Face) => faceDocs.push(Docs.Get.DocumentHierarchyFromJson(face, `Face: ${face.faceId}`)!)); -                return faceDocs; -            }; -            Manager.analyzer(target, ["faces"], Service.Face, converter); -        }; -      }      export namespace Inking { @@ -209,7 +181,8 @@ export namespace CognitiveServices {              analyzer: async (target: Doc, keys: string[], inkData: InkData) => {                  let batch = UndoManager.StartBatch("Ink Analysis"); -                let results = await executeQuery<InkData, any>(Service.Handwriting, Manager, inkData); + +                let results = await ExecuteQuery<InkData, any>(Service.Handwriting, Manager, inkData);                  if (results) {                      results.recognitionUnits && (results = results.recognitionUnits);                      target[keys[0]] = Docs.Get.DocumentHierarchyFromJson(results, "Ink Analysis"); @@ -217,6 +190,7 @@ export namespace CognitiveServices {                      let individualWords = recognizedText.filter((text: string) => text && text.split(" ").length === 1);                      target[keys[1]] = individualWords.join(" ");                  } +                  batch.end();              } | 
