Vue verwendet Canvas-Handschrifteingabe, um Chinesisch zu erkennen

Vue verwendet Canvas-Handschrifteingabe, um Chinesisch zu erkennen

Effektbild:

Vorwort:

Kürzlich arbeitete ich an einem Großbildprojekt für den Außenbereich. Die Eingabemethode auf dem System war nicht benutzerfreundlich, daher forderte der Kunde eine Methode zur Handschrifteingabe an, die in eine Webseite eingebettet werden konnte.

Kern:

Backend-Schnittstellen-API: Verwenden Sie die QQ-Eingabemethode für die Handschriftschnittstelle

https://handwriting.shuru.qq.com/cloud/cgi-bin/cloud_hw_pub.wsgi

Parameter veranschaulichen Typ Standardwert
track_str Strichfolge. Einzelne Striche werden im Format „x1, y1, x2, y2, ...“ aneinandergereiht. Mehrere Striche werden im Format „eb“ auf der Grundlage einzelner Striche aneinandergereiht, zum Beispiel „x1, y1, x2, y2, eb, x3, y3, x4, y4“. Schnur -
cmd Unbekannt, aktuell 0 Nummer -

Hinweis: Diese Schnittstelle wurde aus den Artikeln anderer großer Jungs übernommen. Der Originaltext ist hier. Ich konnte die entsprechende Adresse des offiziellen Dokuments nicht finden. Wenn jemand sie kennt, hinterlassen Sie bitte eine Nachricht, um es mir mitzuteilen. Danke!

Ideen:

(1) Erstellen Sie einen Zeichenbereich auf der Leinwand

// Vorlage
<div Klasse="Canvas-Container">
 <canvas ref="canvas" width="300" height="200">Ihr Browser unterstützt Canvas nicht, bitte aktualisieren Sie Ihren Browser. </Leinwand>
</div>

// scss
.canvas-container {
 Hintergrund: #fafafa;

 Leinwand {
 Hintergrund: #fff;
  Rand: 1px durchgezogen #000;
 }
}


(2) Ermitteln der anfänglichen horizontalen und vertikalen Koordinaten

Daten() {
  zurückkehren {
    initX: 0, // anfängliche horizontale Koordinate initY: 0, // anfängliche vertikale Koordinate}
},
montiert() {
  dies.initBound()
},
Methoden: {
  // Canvas-Position initialisieren initBound() {
    let bound = this.$refs.canvas.getBoundingClientRect()
    dies.initX = gebunden.x
    dies.initY = gebunden.y
  }
}

(3) Fügen Sie Mausklickereignisse, Bewegungsereignisse und Freigabeereignisse hinzu

// Vorlage
<div Klasse="Canvas-Container">
 <canvas ref="canvas" width="300" height="200" @mousedown="onMouseDown" @mousemove="onMouseMove" @mouseup="onMouseUp">Ihr Browser unterstützt Canvas nicht, bitte aktualisieren Sie Ihren Browser. </Leinwand>
</div>
// Skript
Daten() {
  zurückkehren {
    // ...
    
    lastX: 0, // vorherige horizontale KoordinatelastY: 0, // vorherige vertikale KoordinateisHandWrite: false, // ob mit der Handschrift begonnen werden sollpointsXY: [], // einzelner StrichallPointsXY: [], // alle Striche}
},
Methoden: {
  beiMausUnten(e) {
    dies.pointsXY = []
    lass cx = e.clientX - this.initX
    lass cy = e.clientY - this.initY
    dies.letztesX = cx
    dies.letztesY = cy
    dies.pointsXY.push(cx)
    dies.pointsXY.push(cy)
    this.isHandWrite = true
  },
  beiMausbewegung(e) {
    wenn (dies.istHandWrite) {
      lass cx = e.clientX - this.initX
      lass cy = e.clientY - this.initY
      dies.pointsXY.push(cx - dies.lastX)
      dies.pointsXY.push(cy - dies.lastY)
      // Holen Sie sich das 2D-Kontextobjekt let ctx = this.$refs.canvas.getContext('2d')
      // Einen neuen Pfad erstellen ctx.beginPath()
      ctx.strokeStyle = "#000"
      ctx.fillStyle = "#000"
      ctx.Linienbreite = 8
      ctx.lineCap = "rund"
      ctx.moveTo(dieses.letztesX, dieses.letztesY)
      ctx.lineTo(cx, cy)
      ctx.stroke()
      dies.letztesX = cx
      dies.letztesY = cy
    }
  },
  beiMausHoch(e) {
    wenn (dies.istHandWrite) {
      this.isHandWrite = false
      dies.allePunkteXY.push(dies.punkteXY.join(','))
      this.queryText() // Text erkennen}
  },
}


(4) Fügen Sie eine Texterkennungsschnittstelle und eine JSONP-Rückruffunktion hinzu. Vue-JSONP wird für domänenübergreifende Anforderungen verwendet. Informationen zur spezifischen Verwendung finden Sie unter Verwendung von JSONP in Vue.

// Skript
Daten() {
  zurückkehren {
    // ...
    
    write_result: [], //Gibt ähnliche Wörter zurück}
},
montiert() {
  // ...

  lass _dies = dies
  // JSONP-Rückruffunktion hinzufügen, qq-Eingabemethode spezifisch window['QQShuru'] = {
    HWPanel:
      ajax_callback: Funktion (res) {
        _this.write_result = res.cand
      },
    },
  }
},
Methoden: {
  AbfrageText() {
    let track_str = this.allPointsXY.join(',eb,')
    dies.$jsonp(
      `https://handwriting.shuru.qq.com/cloud/cgi-bin/cloud_hw_pub.wsgi?track_str=${track_str}&cmd=0`
    ).catch(err => {
      console.log(fehler)
    })
  },
}


(5) Fügen Sie abschließend eine Schaltfläche zum Neuschreiben hinzu, um die Leinwand zu löschen.

// Vorlage
<div>
  <button @click="onReload">Umschreiben</button>
</div>

// Skript
beimNeuladen() {
  wenn (!this.$refs.canvas) return
  dies.pointsXY = []
  dies.allePunkteXY = []
  lass ctx = dies.$refs.canvas.getContext('2d')
  ctx.clearRect(0, 0, 300, 200)
}

Der vollständige Code lautet wie folgt:

<Vorlage>
  <div id="app">
    <div Klasse="Canvas-Container">
      <canvas ref="canvas" width="300" height="200" @mousedown="onMouseDown" @mousemove="onMouseMove" @mouseup="onMouseUp">Ihr Browser unterstützt Canvas nicht, bitte aktualisieren Sie Ihren Browser. </Leinwand>
    </div>
    <div>[{{ letztesX + ', ' + letztesY }}]</div>
    <div>
      <button @click="onReload">Umschreiben</button>
    </div>
    <div>Gibt ähnliche Wörter zurück: {{ write_result }}</div>
  </div>
</Vorlage>

<Skript>
Standard exportieren {
  Name: "App",
  Daten() {
    zurückkehren {
      initX: 0, // Anfangshorizontale KoordinateinitY: 0, // Anfangsvertikale KoordinatelastX: 0, // Vorherige horizontale KoordinatelastY: 0, // Vorherige vertikale KoordinateisHandWrite: false, // Ob mit der Handschrift begonnen werden sollpointsXY: [], // Einzelner StrichallPointsXY: [], // Alle Strichewrite_result: [], // Gibt ähnliche Zeichen zurück}
  },
  montiert() {
    dies.initBound()

    lass _dies = dies
    // JSONP-Rückruffunktion hinzufügen, qq-Eingabemethode spezifisch window['QQShuru'] = {
      HWPanel:
        ajax_callback: Funktion (res) {
          _this.write_result = res.cand
        },
      },
    }
  },
  Methoden: {
    // Canvas-Position initialisieren initBound() {
      let bound = this.$refs.canvas.getBoundingClientRect()
      dies.initX = gebunden.x
      dies.initY = gebunden.y
    },
    beiMausUnten(e) {
      console.log('onDown', e)
      dies.pointsXY = []
      lass cx = e.clientX - this.initX
      lass cy = e.clientY - this.initY
      dies.letztesX = cx
      dies.letztesY = cy
      dies.pointsXY.push(cx)
      dies.pointsXY.push(cy)
      this.isHandWrite = true
    },
    beiMausbewegung(e) {
      wenn (dies.istHandWrite) {
        lass cx = e.clientX - this.initX
        lass cy = e.clientY - this.initY
        dies.pointsXY.push(cx - dies.lastX)
        dies.pointsXY.push(cy - dies.lastY)
        // Holen Sie sich das 2D-Kontextobjekt let ctx = this.$refs.canvas.getContext('2d')
        // Einen neuen Pfad erstellen ctx.beginPath()
        ctx.strokeStyle = "#000"
        ctx.fillStyle = "#000"
        ctx.Linienbreite = 8
        ctx.lineCap = "rund"
        ctx.moveTo(dieses.letztesX, dieses.letztesY)
        ctx.lineTo(cx, cy)
        ctx.stroke()
        dies.letztesX = cx
        dies.letztesY = cy
      }
    },
    beiMausHoch(e) {
      wenn (dies.istHandWrite) {
        this.isHandWrite = false
        dies.allePunkteXY.push(dies.punkteXY.join(','))
        dieser.queryText()
      }
    },
    // Text erkennen queryText() {
      let track_str = this.allPointsXY.join(',eb,')
      dies.$jsonp(
        `https://handwriting.shuru.qq.com/cloud/cgi-bin/cloud_hw_pub.wsgi?track_str=${track_str}&cmd=0`
      ).catch(err => {
        console.log(fehler)
      })
    },
    beimNeuladen() {
      wenn (!this.$refs.canvas) return
      dies.pointsXY = []
      dies.allePunkteXY = []
      lass ctx = dies.$refs.canvas.getContext('2d')
      ctx.clearRect(0, 0, 300, 200)
    },
  },
}
</Skript>

<style lang="scss">
#app {
  Schriftfamilie: Avenir, Helvetica, Arial, serifenlos;
  -webkit-font-smoothing: Kantenglättung;
  -moz-osx-font-smoothing: Graustufen;
  Textausrichtung: zentriert;
  Farbe: #2c3e50;

  .canvas-container {
    Hintergrund: #fafafa;

    Leinwand {
      Hintergrund: #fff;
      Rand: 1px durchgezogen #000;
    }
  }
}
</Stil>

Dies ist das Ende dieses Artikels über Vue, das Canvas-Handschrifteingaben verwendet, um Chinesisch zu erkennen. Weitere relevante Vue-Inhalte, die Canvas-Handschrifteingaben verwenden, um Chinesisch zu erkennen, finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Vue verwendet Canvas, um Kreise zufälliger Größe und ohne Überlappung zu erzeugen
  • Vue verwendet Canvas, um den Bildkomprimierungs-Upload zu realisieren
  • So zeichnen Sie die Zeitleiste mit Vue+Canvas
  • VUE+Canvas realisiert den gesamten Prozess eines einfachen Gobang-Spiels
  • VUE+Canvas implementiert das Spiel God of Wealth und erhält Barren
  • So verwenden Sie VUE und Canvas, um ein Thunder Fighter-Tippspiel zu implementieren
  • VUE+Canvas implementiert den Beispielcode des Desktop-Flipper-Brick-Breaking-Spiels
  • Vue verwendet die Maus, um ein Rechteck auf Canvas zu zeichnen
  • Vue nutzt Canvas zur Implementierung mobiler handschriftlicher Signaturen
  • Vue+Canvas realisiert Puzzlespiel

<<:  Das Textdesign einer Webseite sollte aussehen wie die Kleidung von intelligenten Mädchen

>>:  So übergeben Sie Parameter über CSS an JS

Artikel empfehlen

Häufige Ursachen und Lösungen für langsame MySQL-SQL-Anweisungen

1. Langsame Abfrage aufgrund fehlenden oder ungül...

So erfassen Sie Ausnahmen in React

Inhaltsverzeichnis Vorwort Fehlergrenze Jenseits ...

So ändern Sie die Zeitzone und die Uhrzeit im Ubuntu-System

Auf einem Linux-Computer gibt es zwei Zeitzonen: ...

Eine kurze Diskussion über 12 klassische Probleme in Angular

Inhaltsverzeichnis 1. Erklären Sie bitte, was die...

Grundlegender JSON-Betriebsleitfaden in MySQL 5.7

Vorwort Aufgrund der Projektanforderungen werden ...

Beispiel für die Integration von Kafka mit Nginx

Hintergrund nginx-kafka-module ist ein Plug-In fü...

Vue-Komponente kapselt Beispielcode zum Hochladen von Bildern und Videos

Laden Sie zuerst die Abhängigkeiten herunter: cnp...

Beispiele für personalisiertes und kreatives Website-Design (30)

Aus diesem Grund haben wir eine Auswahl von 30 Kom...

Detailliertes Tutorial zur Installation von Anaconda3 auf Ubuntu 18.04

Anaconda bezeichnet eine Open-Source-Python-Distr...

So erkennen Sie mit Apache Tika, ob eine Datei beschädigt ist

Apache Tika ist eine Bibliothek zur Dateityperken...

Vue-Kapselungskomponententool $attrs, $listeners-Verwendung

Inhaltsverzeichnis Vorwort $attrs Beispiel: $list...