68 lines
2.9 KiB
Python
68 lines
2.9 KiB
Python
"""Offline dependency and frozen-spawn smoke test, with no camera/model access."""
|
|
import json
|
|
import multiprocessing
|
|
from monitor_runtime.paths import data, resource, atomic_json
|
|
|
|
def spawn_probe(queue):
|
|
import numpy as np
|
|
import cv2
|
|
queue.put({'resized': list(cv2.resize(np.zeros((4,4,3),dtype=np.uint8),(2,2)).shape)})
|
|
|
|
def run():
|
|
from monitor_runtime.bootstrap import prepare_files, initialize_database
|
|
prepare_files()
|
|
initialize_database()
|
|
import django
|
|
import cv2
|
|
import numpy as np
|
|
import torch
|
|
import torchvision
|
|
import onnxruntime
|
|
import openvino as ov
|
|
from ultralytics import YOLO
|
|
from ultralytics.utils import USER_CONFIG_DIR
|
|
assert USER_CONFIG_DIR.resolve().is_relative_to(data('').resolve())
|
|
import pystray
|
|
import whitenoise
|
|
result = {'django':django.get_version(),'opencv':cv2.__version__,'torch':torch.__version__,
|
|
'torchvision':torchvision.__version__,'onnxruntime':onnxruntime.__version__,
|
|
'openvino':ov.__version__}
|
|
assert torch.version.cuda is None
|
|
assert (torch.ones(2,2) @ torch.ones(2,2)).tolist() == [[2.,2.],[2.,2.]]
|
|
assert 'CPUExecutionProvider' in onnxruntime.get_available_providers()
|
|
# Architecture-only random weights: no model download, no customer model or pickle.
|
|
detector = YOLO('yolo26n.yaml', task='detect')
|
|
predictions = detector.predict(np.zeros((64,64,3), dtype=np.uint8), imgsz=64, device='cpu', verbose=False)
|
|
assert len(predictions) == 1 and predictions[0].orig_shape == (64,64)
|
|
result['yolo_cpu_inference'] = 'passed (random weights; no accuracy claim)'
|
|
parameter = ov.opset13.parameter([1],np.float32)
|
|
model = ov.Model([ov.opset13.relu(parameter)],[parameter])
|
|
compiled = ov.Core().compile_model(model,'CPU')
|
|
assert float(compiled([np.array([-1],dtype=np.float32)])[0][0]) == 0
|
|
ctx=multiprocessing.get_context('spawn')
|
|
queue=ctx.Queue()
|
|
process=ctx.Process(target=spawn_probe,args=(queue,))
|
|
process.start()
|
|
try:
|
|
assert queue.get(timeout=60)['resized']==[2,2,3]
|
|
process.join(timeout=20)
|
|
assert process.exitcode==0
|
|
finally:
|
|
if process.is_alive():
|
|
process.terminate()
|
|
process.join(timeout=10)
|
|
queue.close()
|
|
from django.test import Client
|
|
client=Client(HTTP_HOST='localhost')
|
|
response=client.get('/setup',REMOTE_ADDR='127.0.0.1')
|
|
assert response.status_code in (200,403)
|
|
assert resource('public-static/lib/js/app.js').is_file()
|
|
assert resource('zlm/monitor_zlm.exe').is_file()
|
|
assert resource('tools/ffmpeg.exe').is_file()
|
|
from monitor_runtime.licensing import machine_identity
|
|
assert machine_identity()['fingerprint'].startswith('v1:')
|
|
result.update(status='passed',spawn='passed',cpu='passed',resources='passed',
|
|
writable_caches='ProgramData/test data root')
|
|
atomic_json(data('.runtime/self-test.json'),result)
|
|
return 0
|