Aktueller Stand
This commit is contained in:
parent
f70af3a59e
commit
2c7fbac29c
|
|
@ -9,10 +9,15 @@ export interface Deck {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface DeckImage {
|
export interface DeckImage {
|
||||||
image: string;
|
boxes: Box[];
|
||||||
text: string;
|
name: string;
|
||||||
|
}
|
||||||
|
export interface Box {
|
||||||
|
x1:number;
|
||||||
|
x2:number;
|
||||||
|
y1:number;
|
||||||
|
y2:number;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
})
|
})
|
||||||
|
|
@ -24,7 +29,9 @@ export class DeckService {
|
||||||
getDecks(): Observable<Deck[]> {
|
getDecks(): Observable<Deck[]> {
|
||||||
return this.http.get<Deck[]>(this.apiUrl);
|
return this.http.get<Deck[]>(this.apiUrl);
|
||||||
}
|
}
|
||||||
|
getImage(name:string): Observable<DeckImage> {
|
||||||
|
return this.http.get<DeckImage>(`${this.apiUrl}/image/${name}`);
|
||||||
|
}
|
||||||
createDeck(deckname: string): Observable<any> {
|
createDeck(deckname: string): Observable<any> {
|
||||||
return this.http.post(this.apiUrl, { deckname });
|
return this.http.post(this.apiUrl, { deckname });
|
||||||
}
|
}
|
||||||
|
|
@ -33,10 +40,7 @@ export class DeckService {
|
||||||
return this.http.delete(`${this.apiUrl}/${encodeURIComponent(deckName)}`);
|
return this.http.delete(`${this.apiUrl}/${encodeURIComponent(deckName)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
uploadImage(deckName: string, image: File, text: string): Observable<any> {
|
saveImageData(data:any): Observable<any> {
|
||||||
const formData = new FormData();
|
return this.http.post(`${this.apiUrl}/image`, data);
|
||||||
formData.append('image', image);
|
|
||||||
formData.append('text', text);
|
|
||||||
return this.http.post(`${this.apiUrl}/${encodeURIComponent(deckName)}/images`, formData);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,9 @@
|
||||||
<div class="mt-10">
|
<div class="mt-10">
|
||||||
<h2 class="text-2xl font-bold mb-4">Training: {{ deck.name }}</h2>
|
<h2 class="text-2xl font-bold mb-4">Training: {{ deck.name }}</h2>
|
||||||
<div class="bg-white shadow rounded-lg p-6 flex flex-col items-center">
|
<div class="bg-white shadow rounded-lg p-6 flex flex-col items-center">
|
||||||
<img [src]="currentImage?.image" alt="Vokabelbild" class="w-64 h-64 object-contain mb-4">
|
<img [src]="currentImage" alt="Vokabelbild" class="max-h-[50vh] object-contain mb-4">
|
||||||
<div *ngIf="showTextFlag" class="bg-black bg-opacity-50 text-white text-lg p-2 rounded mb-4">
|
<div *ngIf="showTextFlag" class="bg-black bg-opacity-50 text-white text-lg p-2 rounded mb-4">
|
||||||
{{ currentImage?.text }}
|
<!-- {{ currentImage?.text }} -->
|
||||||
</div>
|
</div>
|
||||||
<div class="flex space-x-4">
|
<div class="flex space-x-4">
|
||||||
<button (click)="showText()" class="bg-green-500 text-white py-2 px-4 rounded hover:bg-green-600" [disabled]="showTextFlag">
|
<button (click)="showText()" class="bg-green-500 text-white py-2 px-4 rounded hover:bg-green-600" [disabled]="showTextFlag">
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,9 @@ export class TrainingComponent {
|
||||||
unknownCount: number = 0;
|
unknownCount: number = 0;
|
||||||
showTextFlag: boolean = false;
|
showTextFlag: boolean = false;
|
||||||
|
|
||||||
get currentImage(): DeckImage | null {
|
get currentImage(): string | null {
|
||||||
if (this.currentIndex < this.deck.images.length) {
|
if (this.currentIndex < this.deck.images.length) {
|
||||||
return this.deck.images[this.currentIndex];
|
return `/api/debug_image/${this.deck.images[this.currentIndex].name}`;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ export class UploadImageModalComponent implements AfterViewInit, OnDestroy {
|
||||||
modal:any;
|
modal:any;
|
||||||
originalImageWidth:number|undefined;
|
originalImageWidth:number|undefined;
|
||||||
originalImageHeight:number|undefined;
|
originalImageHeight:number|undefined;
|
||||||
|
imagename:string|undefined|null;
|
||||||
constructor(private deckService: DeckService, private http: HttpClient) { }
|
constructor(private deckService: DeckService, private http: HttpClient) { }
|
||||||
|
|
||||||
ngAfterViewInit(): void {
|
ngAfterViewInit(): void {
|
||||||
|
|
@ -135,6 +136,7 @@ export class UploadImageModalComponent implements AfterViewInit, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bildverarbeitung im Frontend durchführen
|
// Bildverarbeitung im Frontend durchführen
|
||||||
|
this.imagename = (response.results && response.results.length>0)?response.results[0].name:null;
|
||||||
await this.processImage(response.results);
|
await this.processImage(response.results);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Fehler beim OCR-Service:', error);
|
console.error('Fehler beim OCR-Service:', error);
|
||||||
|
|
@ -313,12 +315,10 @@ export class UploadImageModalComponent implements AfterViewInit, OnDestroy {
|
||||||
save(): void {
|
save(): void {
|
||||||
// Hier kannst du die Logik zum Speichern der Bilddaten implementieren
|
// Hier kannst du die Logik zum Speichern der Bilddaten implementieren
|
||||||
// Zum Beispiel:
|
// Zum Beispiel:
|
||||||
/*
|
|
||||||
const data = {
|
const data = {
|
||||||
deckName: this.deckName,
|
deckname: this.deckName,
|
||||||
image: this.originalImageSrc,
|
image: this.imagename,
|
||||||
boxes: this.boxes,
|
boxes: this.boxes,
|
||||||
detectedText: this.detectedText
|
|
||||||
};
|
};
|
||||||
this.deckService.saveImageData(data).subscribe({
|
this.deckService.saveImageData(data).subscribe({
|
||||||
next: () => {
|
next: () => {
|
||||||
|
|
@ -331,7 +331,6 @@ export class UploadImageModalComponent implements AfterViewInit, OnDestroy {
|
||||||
alert('Fehler beim Speichern des Bildes.');
|
alert('Fehler beim Speichern des Bildes.');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
*/
|
|
||||||
// Temporäres Beispiel:
|
// Temporäres Beispiel:
|
||||||
alert('Save button clicked');
|
alert('Save button clicked');
|
||||||
this.imageUploaded.emit();
|
this.imageUploaded.emit();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue