feat: publish full RELLIS qualification
This commit is contained in:
@@ -10,8 +10,10 @@ import {
|
||||
type LidarGroundViewMode,
|
||||
} from "./LidarGroundPointCloud";
|
||||
import {
|
||||
fetchGroundQualification,
|
||||
fetchGroundReview,
|
||||
fetchGroundReviewFrame,
|
||||
type GroundQualification,
|
||||
type GroundReview,
|
||||
type GroundReviewFrame,
|
||||
type GroundReviewFrameSummary,
|
||||
@@ -324,6 +326,7 @@ function qualifiedModeExplanation(mode: LidarGroundViewMode) {
|
||||
}
|
||||
|
||||
function RellisQualifiedReview({ runId }: { runId: string }) {
|
||||
const [qualification, setQualification] = useState<GroundQualification | null>(null);
|
||||
const [review, setReview] = useState<GroundReview | null>(null);
|
||||
const [frame, setFrame] = useState<GroundReviewFrame | null>(null);
|
||||
const [selectedSequence, setSelectedSequence] = useState<string | null>(null);
|
||||
@@ -336,15 +339,20 @@ function RellisQualifiedReview({ runId }: { runId: string }) {
|
||||
useEffect(() => {
|
||||
const controller = new AbortController();
|
||||
setError(null);
|
||||
setQualification(null);
|
||||
setReview(null);
|
||||
setFrame(null);
|
||||
cache.current.clear();
|
||||
void fetchGroundReview(runId, { signal: controller.signal })
|
||||
.then((value) => {
|
||||
if (controller.signal.aborted || !value) return;
|
||||
setReview(value);
|
||||
setSelectedSequence(value.frames[0]?.datasetSequenceId ?? null);
|
||||
setSelectedFrame(value.frames[0]?.frameId ?? null);
|
||||
void Promise.all([
|
||||
fetchGroundQualification(runId, { signal: controller.signal }),
|
||||
fetchGroundReview(runId, { signal: controller.signal }),
|
||||
])
|
||||
.then(([qualificationValue, reviewValue]) => {
|
||||
if (controller.signal.aborted || !qualificationValue || !reviewValue) return;
|
||||
setQualification(qualificationValue);
|
||||
setReview(reviewValue);
|
||||
setSelectedSequence(reviewValue.frames[0]?.datasetSequenceId ?? null);
|
||||
setSelectedFrame(reviewValue.frames[0]?.frameId ?? null);
|
||||
})
|
||||
.catch((loadError: unknown) => {
|
||||
if (!controller.signal.aborted) setError(errorMessage(loadError));
|
||||
@@ -440,7 +448,7 @@ function RellisQualifiedReview({ runId }: { runId: string }) {
|
||||
<header className="dataset-sequence-review__truth">
|
||||
<div>
|
||||
<span className="section-eyebrow">RELLIS · FULL VALIDATION</span>
|
||||
<h2>Пять последовательностей Ouster OS1 с покадровым сравнением</h2>
|
||||
<h2>Две validation-последовательности Ouster OS1 с покадровым сравнением</h2>
|
||||
<p>
|
||||
Все {review.frameCount.toLocaleString("ru-RU")} validation-сканов
|
||||
выровнены с labels и pose index. Высота Patchwork++ определена только
|
||||
@@ -577,6 +585,26 @@ function RellisQualifiedReview({ runId }: { runId: string }) {
|
||||
</article>
|
||||
</div>
|
||||
|
||||
{qualification ? (
|
||||
<div
|
||||
className="rellis-review__decision"
|
||||
data-passed={qualification.decision.passed ? "true" : "false"}
|
||||
>
|
||||
<strong>
|
||||
{qualification.decision.passed
|
||||
? "Кандидат прошёл независимую проверку"
|
||||
: "Patchwork++ не прошёл независимую проверку"}
|
||||
</strong>
|
||||
<span>
|
||||
Полный validation: obstacle recall{" "}
|
||||
{formatPercent(qualification.current.micro.obstacleNonGroundRecall)}
|
||||
{" → "}
|
||||
{formatPercent(qualification.patchwork.micro.obstacleNonGroundRecall)}.
|
||||
Алгоритм не принят для navigation/safety.
|
||||
</span>
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
<p className="dataset-sequence-review__raw-note">
|
||||
Это независимая исследовательская проверка переносимости. Она не
|
||||
включает управление машиной и не принимает алгоритм для navigation/safety.
|
||||
|
||||
Reference in New Issue
Block a user