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

This commit is contained in:
Liang Ding 2023-04-14 15:22:15 +08:00
parent c6b3083a24
commit 9461cc3f95
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
3 changed files with 51 additions and 5 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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
}