Show HN: Gogosseract, a Go Lib for CGo-Free Tesseract OCR via Wazero

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • gogosseract

    A reimplementation of https://github.com/otiai10/gosseract without CGo, running Tesseract compiled to WASM with Wazero

  • compress

    Optimized Go Compression Packages

  • There's a pure-go zstd at https://github.com/klauspost/compress - it's likely faster than running the upstream zstd under Wazero.

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • wabt

    The WebAssembly Binary Toolkit

  • You mean this? https://github.com/WebAssembly/wabt/blob/main/wasm2c/README....

    That seems like quite an undertaking. But at that point, It would make sense to cut out WASM entirely like https://datastation.multiprocess.io/blog/2022-05-12-sqlite-i...

  • go-sqlite3

    Go bindings to SQLite using wazero (by ncruces)

  • Disclosure: I'm working on alternative Cgo-less bindings for SQLite, using wazero.

    https://github.com/ncruces/go-sqlite3

    One of the problems of the modernc approach (IMO) is that they're not just transpiring CPU/compute stuff, but entirely OS/platform stuff.

    Each Go file of theirs is a xxx_os_arch.go that starts with 100s of OS-#defines-as-consts, and goes on to transpile fully #ifdefed code.

    It also implements antithetical (in Go) stuff like goroutine local storage, because libc pthreads can't live without it.

    And all IO is via direct syscalls that will never play nice with the Go scheduler, because, again this is OS level stuff.

    WASM defines a cross platform CPU and an ABI, and using that for compute and the bottom OS layer in Go you get (IMO) a nicer end result.

    Given the hard task of generating decent code from WASM at load time (wazero's compiler is pretty naive, a better one is being developed, but it will take seconds to generate good code for anything non trivial like SQLite) I wouldn't mind having a solution that translated to Go, or Go ASM, at build time.

  • go-zstd

  • Just for reference I did give it a try

    https://github.com/wasilibs/go-zstd

    Mostly since I hadn't found `compress` supports zstd. Wazero performed reasonably well against the cgo library but was indeed much slower than this proper pure go port.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts