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

Eine kurze Diskussion über Schreibregeln für Docker Compose

Dieser Artikel stellt nichts im Zusammenhang mit ...

So erstellen Sie eine Ansicht für mehrere Tabellen in MySQL

Erstellen Sie in MySQL eine Ansicht für zwei oder...

CSS und JS für eine romantische Meteorschauer-Animation

1. Rendern 2. Quellcode HTML < Textkörper >...

Detaillierte Erklärung des Overflow-Scrollens zur Lösung des Scroll-Lag-Problems

Vorwort Wenn Sie das Attribut „overflow: scroll“ ...

Vue3 + el-table realisiert Zeilen- und Spaltenkonvertierung

Inhaltsverzeichnis Zeilen-Spalten-Konvertierung A...

Protokoll des Kompilierungs- und Installationsprozesses des Nginx-Quellcodes

Die Installation des RPM-Pakets ist relativ einfa...

Import-, Export-, Sicherungs- und Migrationsvorgänge für Docker-Images

Export: docker save -o centos.tar centos:latest #...

Zusammenfassung der HTML-Wissenspunkte für das Frontend (empfohlen)

1. HTML-Übersicht htyper Textauszeichnungssprache...

Detaillierte Erläuterung des mobilen Projekts vite2.0 + vue3

1. Technische Punkte Vite-Version vue3 ts Integri...

Teilen Sie 101 MySQL-Debugging- und Optimierungstipps

MySQL ist eine leistungsstarke Open-Source-Datenb...

Detaillierte Erklärung zur Verwendung des Linux-Befehls Traceroute

Mithilfe von Traceroute können wir den Pfad ermit...