|
|
@@ -10,11 +10,11 @@ import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; |
|
|
|
import IconButton from 'mastodon/components/icon_button'; |
|
|
|
import Button from 'mastodon/components/button'; |
|
|
|
import Video from 'mastodon/features/video'; |
|
|
|
import { TesseractWorker } from 'tesseract.js'; |
|
|
|
import Textarea from 'react-textarea-autosize'; |
|
|
|
import UploadProgress from 'mastodon/features/compose/components/upload_progress'; |
|
|
|
import CharacterCounter from 'mastodon/features/compose/components/character_counter'; |
|
|
|
import { length } from 'stringz'; |
|
|
|
import { Tesseract as fetchTesseract } from 'mastodon/features/ui/util/async-components'; |
|
|
|
|
|
|
|
const messages = defineMessages({ |
|
|
|
close: { id: 'lightbox.close', defaultMessage: 'Close' }, |
|
|
@@ -148,19 +148,21 @@ class FocalPointModal extends ImmutablePureComponent { |
|
|
|
handleTextDetection = () => { |
|
|
|
const { media } = this.props; |
|
|
|
|
|
|
|
const worker = new TesseractWorker({ |
|
|
|
workerPath: `${assetHost}/packs/ocr/worker.min.js`, |
|
|
|
corePath: `${assetHost}/packs/ocr/tesseract-core.wasm.js`, |
|
|
|
langPath: `${assetHost}/ocr/lang-data`, |
|
|
|
}); |
|
|
|
|
|
|
|
this.setState({ detecting: true }); |
|
|
|
|
|
|
|
worker.recognize(media.get('url')) |
|
|
|
.progress(({ progress }) => this.setState({ progress })) |
|
|
|
.finally(() => worker.terminate()) |
|
|
|
.then(({ text }) => this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false })) |
|
|
|
.catch(() => this.setState({ detecting: false })); |
|
|
|
fetchTesseract().then(({ TesseractWorker }) => { |
|
|
|
const worker = new TesseractWorker({ |
|
|
|
workerPath: `${assetHost}/packs/ocr/worker.min.js`, |
|
|
|
corePath: `${assetHost}/packs/ocr/tesseract-core.wasm.js`, |
|
|
|
langPath: `${assetHost}/ocr/lang-data`, |
|
|
|
}); |
|
|
|
|
|
|
|
worker.recognize(media.get('url')) |
|
|
|
.progress(({ progress }) => this.setState({ progress })) |
|
|
|
.finally(() => worker.terminate()) |
|
|
|
.then(({ text }) => this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false })) |
|
|
|
.catch(() => this.setState({ detecting: false })); |
|
|
|
}).catch(() => this.setState({ detecting: false })); |
|
|
|
} |
|
|
|
|
|
|
|
render () { |
|
|
|