65 lines
5.2 KiB
XML
65 lines
5.2 KiB
XML
<view class="wrap" style="padding-top:calc({{toolbarTop}}px + 240rpx);">
|
|
<!-- Uses the documented Taobao component, only after camera permission. -->
|
|
<ar-camera a:if="{{running}}" id="test-ar-camera-{{cameraSession}}" data-session="{{cameraSession}}" class="cam" mode="faceDetection2D" useCapturedImage="{{true}}" devicePosition="{{devicePosition}}"
|
|
onInit="onARInit" onARFrame="onARFrame" onStop="onARStop" onError="onError" />
|
|
<view class="diag-toolbar" style="top:{{toolbarTop}}px;">
|
|
<view class="toolbar-version">AR 相机诊断 · {{probeVersion}}</view>
|
|
<button class="native-probe-entry" onTap="onOpenNativeProbe" disabled="{{busy || exporting}}">进入普通前置相机测试</button>
|
|
<view class="toolbar-actions">
|
|
<button class="copy-diagnostics" onTap="onCopyDiagnostics">复制诊断信息</button>
|
|
<button class="export-photo" onTap="onSnapshot" disabled="{{!running || busy || exporting}}">导出照片</button>
|
|
</view>
|
|
<view class="copy-status" a:if="{{copyStatus}}">{{copyStatus}}</view>
|
|
<view class="copy-fallback" a:if="{{diagnosticText}}">
|
|
<view class="copy-help">长按文字可选择复制;再次点击上方按钮可更新。仅含安全诊断,不含照片或账号信息。</view>
|
|
<scroll-view class="copy-text-scroll" scroll-y><text class="copy-text" selectable="{{true}}">{{diagnosticText}}</text></scroll-view>
|
|
</view>
|
|
</view>
|
|
<view class="probe">
|
|
<view class="title">AR 相机真机验收</view>
|
|
<view class="version">诊断版本 {{probeVersion}}</view>
|
|
<view class="note">只检测本机实时帧与照片导出;不登录账号、不上传、不生成报告。</view>
|
|
<view class="diagnostics"><text>{{environmentText}}</text></view>
|
|
<view class="note">{{capabilityText}}</view>
|
|
<view class="facing">请求{{devicePosition === 'front' ? '前置' : '后置'}}镜头 · 请核对实际画面</view>
|
|
<view class="note">切换将重新挂载相机;方向属性是否生效需在手机核验。原始人脸坐标未作镜像,请分别向左右转头并核对提示。</view>
|
|
<view class="actions">
|
|
<button onTap="onStart" disabled="{{running || busy}}">开启 AR 相机</button>
|
|
<button onTap="onFlip" disabled="{{!running}}">切换镜头</button>
|
|
<button onTap="onStop" disabled="{{!running}}">停止</button>
|
|
</view>
|
|
<view class="calibration">
|
|
<view class="note">高级可选:校验照片颜色。可直接使用顶部“导出照片”。</view>
|
|
<button class="calibration-optional" onTap="onCalibrate" disabled="{{!running || busy || exporting}}">高级:校验照片颜色</button>
|
|
<view class="note">此功能只在本机生成同一帧的候选预览,不上传、不保存,可根据实际肤色、衣物和背景选择。</view>
|
|
<view class="calibration-confirmed" a:if="{{calibrationConfirmed}}">本次运行已确认格式:{{calibrationConfirmed}}</view>
|
|
<view class="note" a:if="{{calibrationText}}">{{calibrationText}}</view>
|
|
<view class="calibration-grid" a:if="{{calibrationItems.length}}">
|
|
<view class="calibration-card" a:for="{{calibrationItems}}" a:key="format">
|
|
<view class="calibration-format">{{item.format}}</view>
|
|
<image class="calibration-image" src="{{item.url}}" mode="aspectFit" />
|
|
<button data-format="{{item.format}}" data-batch="{{item.batchId}}" onTap="onConfirmCalibration" disabled="{{!calibrationReady}}">这张颜色正常</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="note">只读取 context 公开方法的属性描述符,不执行 getter 或未知方法。复制内容不包含照片、人脸坐标或账号信息。</view>
|
|
<view class="diagnostics"><text>Context 方法:{{contextText}}</text></view>
|
|
<view class="diagnostics"><text>{{eventText}}</text></view>
|
|
<view class="targets">
|
|
<view class="target {{target === 'front' ? 'active' : ''}}" data-target="front" onTap="onTarget">正脸</view>
|
|
<view class="target {{target === 'right' ? 'active' : ''}}" data-target="right" onTap="onTarget">右脸(向左转头)</view>
|
|
<view class="target {{target === 'left' ? 'active' : ''}}" data-target="left" onTap="onTarget">左脸(向右转头)</view>
|
|
</view>
|
|
<view class="status">{{status}}</view>
|
|
<view class="note">{{frameText}} · 回调 {{frameCount}} 次 · 标准帧 {{standardFrameCount}} 次</view>
|
|
<view class="note" a:if="{{poseText}}">{{poseText}}</view>
|
|
<view class="error" a:if="{{errorText}}">{{errorText}}</view>
|
|
<scroll-view class="fields" scroll-y a:if="{{fieldText}}"><text>{{fieldText}}</text></scroll-view>
|
|
<view class="note">收到人脸 anchor 不代表能够导出照片。未知帧格式将明确报错;请核对预览是否为本次本人、左右方向和肤色是否正常。</view>
|
|
<image class="snapshot" a:if="{{snapshotUrl}}" src="{{snapshotUrl}}" mode="aspectFit" />
|
|
<view class="note" a:if="{{snapshotText}}">{{snapshotText}}</view>
|
|
</view>
|
|
<!-- Keep this canvas mounted and laid out for actual device exports. -->
|
|
<canvas id="compress-canvas" canvas-id="compress-canvas" width="{{compressWidth}}" height="{{compressHeight}}" class="compress-canvas" style="width:{{compressWidth}}px;height:{{compressHeight}}px" />
|
|
</view>
|