Sfoglia il codice sorgente

:art: Add OCR-related operations to the picture menu https://github.com/siyuan-note/siyuan/issues/7203

Liang Ding 2 anni fa
parent
commit
9461cc3f95
3 ha cambiato i file con 51 aggiunte e 5 eliminazioni
  1. 34 0
      kernel/api/asset.go
  2. 2 0
      kernel/api/router.go
  3. 15 5
      kernel/util/tesseract.go

+ 34 - 0
kernel/api/asset.go

@@ -29,6 +29,40 @@ import (
 	"github.com/siyuan-note/siyuan/kernel/util"
 )
 
+func getImageOCRText(c *gin.Context) {
+	ret := gulu.Ret.NewResult()
+	defer c.JSON(http.StatusOK, ret)
+
+	arg, ok := util.JsonArg(c, ret)
+	if !ok {
+		return
+	}
+
+	path := arg["path"].(string)
+	force := false
+	if forceArg := arg["force"]; nil != forceArg {
+		force = forceArg.(bool)
+	}
+
+	ret.Data = map[string]interface{}{
+		"text": util.GetAssetText(path, force),
+	}
+}
+
+func setImageOCRText(c *gin.Context) {
+	ret := gulu.Ret.NewResult()
+	defer c.JSON(http.StatusOK, ret)
+
+	arg, ok := util.JsonArg(c, ret)
+	if !ok {
+		return
+	}
+
+	path := arg["path"].(string)
+	text := arg["text"].(string)
+	util.SetAssetText(path, text)
+}
+
 func renameAsset(c *gin.Context) {
 	ret := gulu.Ret.NewResult()
 	defer c.JSON(http.StatusOK, ret)

+ 2 - 0
kernel/api/router.go

@@ -226,6 +226,8 @@ func ServeAPI(ginServer *gin.Engine) {
 	ginServer.Handle("POST", "/api/asset/removeUnusedAssets", model.CheckAuth, model.CheckReadonly, removeUnusedAssets)
 	ginServer.Handle("POST", "/api/asset/getDocImageAssets", model.CheckAuth, model.CheckReadonly, getDocImageAssets)
 	ginServer.Handle("POST", "/api/asset/renameAsset", model.CheckAuth, model.CheckReadonly, renameAsset)
+	ginServer.Handle("POST", "/api/asset/getImageOCRText", model.CheckAuth, model.CheckReadonly, getImageOCRText)
+	ginServer.Handle("POST", "/api/asset/setImageOCRText", model.CheckAuth, model.CheckReadonly, setImageOCRText)
 
 	ginServer.Handle("POST", "/api/export/batchExportMd", model.CheckAuth, batchExportMd)
 	ginServer.Handle("POST", "/api/export/exportMd", model.CheckAuth, exportMd)

+ 15 - 5
kernel/util/tesseract.go

@@ -44,21 +44,31 @@ var (
 	TesseractLangs []string
 )
 
-func GetAssetText(asset string) string {
+func SetAssetText(asset, text string) {
 	AssetsTextsLock.Lock()
-	ret, ok := AssetsTexts[asset]
+	AssetsTexts[asset] = text
 	AssetsTextsLock.Unlock()
-	if ok {
-		return ret
+	AssetsTextsChanged = true
+}
+
+func GetAssetText(asset string, force bool) string {
+	if !force {
+		AssetsTextsLock.Lock()
+		ret, ok := AssetsTexts[asset]
+		AssetsTextsLock.Unlock()
+		if ok {
+			return ret
+		}
 	}
 
 	assetsPath := GetDataAssetsAbsPath()
 	assetAbsPath := strings.TrimPrefix(asset, "assets")
 	assetAbsPath = filepath.Join(assetsPath, assetAbsPath)
-	ret = Tesseract(assetAbsPath)
+	ret := Tesseract(assetAbsPath)
 	AssetsTextsLock.Lock()
 	AssetsTexts[asset] = ret
 	AssetsTextsLock.Unlock()
+	AssetsTextsChanged = true
 	return ret
 }