🎨 Remove the check for !TesseractEnabled when saving OCR recognition results (#11708)

* 去除保存ocr识别结果时对 !TesseractEnabled 的检测

* 🐛 https://github.com/siyuan-note/siyuan/issues/11709

* https://github.com/siyuan-note/siyuan/pull/11708

修改ocr相关接口

* https://github.com/siyuan-note/siyuan/pull/11708

修改前端相关代码

* Update router.go

* Update router.go

---------

Co-authored-by: Vanessa <lly219@gmail.com>
This commit is contained in:
崮生 2024-06-15 17:51:48 +08:00 committed by GitHub
parent 6efa948859
commit b590091c9e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 38 additions and 18 deletions

View file

@ -1017,8 +1017,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
bind(element) {
element.style.maxWidth = "none";
fetchPost("/api/asset/getImageOCRText", {
path: imgElement.getAttribute("src"),
force: false
path: imgElement.getAttribute("src")
}, (response) => {
element.querySelector("textarea").value = response.data.text;
});
@ -1029,9 +1028,14 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
iconHTML: "",
label: window.siyuan.languages.reOCR,
click() {
fetchPost("/api/asset/getImageOCRText", {
fetchPost("/api/asset/ocr", {
path: imgElement.getAttribute("src"),
force: true
}, (response) => {
fetchPost("/api/asset/setImageOCRText", {
path: imgElement.getAttribute("src"),
text: response.data.text
});
});
}
}],
@ -1115,13 +1119,6 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
const textElements = window.siyuan.menus.menu.element.querySelectorAll("textarea");
textElements[0].focus();
window.siyuan.menus.menu.removeCB = () => {
const ocrElemennt = window.siyuan.menus.menu.element.querySelector('[data-type="ocr"]') as HTMLTextAreaElement;
if (ocrElemennt) {
fetchPost("/api/asset/setImageOCRText", {
path: imgElement.getAttribute("src"),
text: ocrElemennt.value
});
}
imgElement.setAttribute("alt", textElements[2].value.replace(/\n|\r\n|\r|\u2028|\u2029/g, ""));
nodeElement.setAttribute("updated", dayjs().format("YYYYMMDDHHmmss"));
updateTransaction(protyle, id, nodeElement.outerHTML, html);

View file

@ -107,13 +107,9 @@ func getImageOCRText(c *gin.Context) {
}
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),
"text": util.GetAssetText(path),
}
}
@ -131,6 +127,26 @@ func setImageOCRText(c *gin.Context) {
util.SetAssetText(path, text)
}
func ocr(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.OcrAsset(path, force),
}
}
func renameAsset(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)

View file

@ -266,6 +266,7 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/asset/renameAsset", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, renameAsset)
ginServer.Handle("POST", "/api/asset/getImageOCRText", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, getImageOCRText)
ginServer.Handle("POST", "/api/asset/setImageOCRText", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, setImageOCRText)
ginServer.Handle("POST", "/api/asset/ocr", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, ocr)
ginServer.Handle("POST", "/api/asset/fullReindexAssetContent", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, fullReindexAssetContent)
ginServer.Handle("POST", "/api/asset/statAsset", model.CheckAuth, model.CheckAdminRole, statAsset)

View file

@ -198,7 +198,7 @@ func nodeStaticContent(node *ast.Node, excludeTypes []string, includeTextMarkATi
var linkDestStr, ocrText string
if nil != linkDest {
linkDestStr = linkDest.TokensStr()
ocrText = util.GetAssetText(linkDestStr, false)
ocrText = util.OcrAsset(linkDestStr, false)
}
linkText := n.ChildByType(ast.NodeLinkText)

View file

@ -102,7 +102,7 @@ func LoadAssetsTexts() {
}
func SaveAssetsTexts() {
if !assetsTextsChanged.Load() || !TesseractEnabled {
if !assetsTextsChanged.Load() {
return
}
@ -149,7 +149,7 @@ func ExistsAssetText(asset string) (ret bool) {
return
}
func GetAssetText(asset string, force bool) (ret string) {
func OcrAsset(asset string, force bool) (ret string) {
if !force {
assetsTextsLock.Lock()
ret = assetsTexts[asset]
@ -170,6 +170,12 @@ func GetAssetText(asset string, force bool) (ret string) {
return
}
// https://github.com/siyuan-note/siyuan/pull/11708
func GetAssetText(asset string) (ret string) {
ret = assetsTexts[asset]
return
}
func IsTesseractExtractable(p string) bool {
lowerName := strings.ToLower(p)
return strings.HasSuffix(lowerName, ".png") || strings.HasSuffix(lowerName, ".jpg") || strings.HasSuffix(lowerName, ".jpeg")