-
Notifications
You must be signed in to change notification settings - Fork 65
Expand file tree
/
Copy pathImagenetClassifier.php
More file actions
62 lines (54 loc) · 2.22 KB
/
ImagenetClassifier.php
File metadata and controls
62 lines (54 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
/*
* Copyright (c) 2021-2022 The Recognize contributors.
* This file is licensed under the Affero General Public License version 3 or later. See the COPYING file.
*/
declare(strict_types=1);
namespace OCA\Recognize\Classifiers\Images;
use OCA\Recognize\Classifiers\Classifier;
use OCA\Recognize\Service\Logger;
use OCA\Recognize\Service\QueueService;
use OCA\Recognize\Service\TagManager;
use OCP\AppFramework\Services\IAppConfig;
use OCP\Files\IRootFolder;
use OCP\IPreview;
use OCP\ITempManager;
use Override;
final class ImagenetClassifier extends Classifier {
public const IMAGE_TIMEOUT = 480; // seconds
public const IMAGE_PUREJS_TIMEOUT = 600; // seconds
public const MODEL_NAME = 'imagenet';
private TagManager $tagManager;
protected QueueService $queue;
public function __construct(Logger $logger, IAppConfig $config, TagManager $tagManager, QueueService $queue, IRootFolder $rootFolder, ITempManager $tempManager, IPreview $previewProvider) {
parent::__construct($logger, $config, $rootFolder, $queue, $tempManager, $previewProvider);
$this->tagManager = $tagManager;
$this->queue = $queue;
}
#[Override]
public function classify(array $queueFiles): void {
if ($this->config->getAppValueString('tensorflow.purejs', 'false', lazy: true) === 'true') {
$timeout = self::IMAGE_PUREJS_TIMEOUT;
} else {
$timeout = self::IMAGE_TIMEOUT;
}
$classifierProcess = $this->classifyFiles(self::MODEL_NAME, $queueFiles, $timeout);
/** @var \OCA\Recognize\Db\QueueFile $queueFile */
/** @var list<string> $results */
foreach ($classifierProcess as $queueFile => $results) {
$this->tagManager->assignTags($queueFile->getFileId(), $results);
$landmarkTags = array_filter($results, static function ($tagName) {
return in_array($tagName, LandmarksClassifier::PRECONDITION_TAGS);
});
$this->config->setAppValueString(self::MODEL_NAME.'.status', 'true', lazy: true);
$this->config->setAppValueString(self::MODEL_NAME.'.lastFile', (string)time(), lazy: true);
if (count($landmarkTags) > 0) {
try {
$this->queue->insertIntoQueue(LandmarksClassifier::MODEL_NAME, $queueFile);
} catch (\Throwable $e) {
$this->logger->error('Cannot insert file into queue', ['exception' => $e]);
}
}
}
}
}