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

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.17

In diesem Artikel wird die Installations- und Kon...

So funktionieren React Hooks

Inhaltsverzeichnis 1. React Hooks vs. reine Funkt...

Auszeichnungssprache - vereinfachte Tags

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Swiper+echarts realisiert den Links- und Rechts-Scrolleffekt mehrerer Dashboards

In diesem Artikel wird der spezifische Code von S...

CentOS8-Installationstutorial für JDK8/Java8 (empfohlen)

Vorwort Zuerst wollte ich es mit wget auf CentOS8...

Lösung zum Vergessen des Passworts des Pagodenpanels in Linux 3.X/4.x/5.x

Geben Sie ssh ein und geben Sie den folgenden Bef...

JavaScript BOM-Standortobjekt + Navigatorobjekt + Verlaufsobjekt

Inhaltsverzeichnis 1. Standortobjekt 1. URL 2. Ei...

Mehrere Möglichkeiten zur Implementierung der Vererbung in JavaScript

Inhaltsverzeichnis Strukturelle Vererbung (implem...

Verwendung und Verständnis von MySQL-Triggern

Inhaltsverzeichnis 1. Was ist ein Auslöser? 2. Er...

So stellen Sie zabbix_agent in Docker bereit

zabbix_agent-Bereitstellung: Empfehlung: zabbix_a...

Korrekte Änderungsschritte für das Standardnetzwerksegment von Docker

Hintergrund Ein Kollege arbeitet an seinem Sicher...

Beheben Sie den Fehler bei der Installation von VMware Tools unter Ubuntu 18.04

1. Laut dem Online-Tutorial schlägt die Installat...

So verschieben Sie den Datenspeicherort von mysql5.7.19 in Centos7

Szenario: Mit zunehmender Datenmenge ist die Fest...