异步编码截图

This commit is contained in:
zhbaor 2024-11-25 22:00:56 +08:00
parent dcd08ab559
commit dbde9508cb
4 changed files with 11 additions and 17 deletions

View file

@ -20,7 +20,7 @@ from mower.utils.device.simulator import restart_simulator
from mower.utils.device.simulator.MuMu12_external_renderer_ipc import (
MuMu12ExternalRendererIPC,
)
from mower.utils.image import bytes2img, img2bytes
from mower.utils.image import bytes2img
from mower.utils.log import logger, save_screenshot
from mower.utils.network import get_new_port, is_port_in_use
@ -291,9 +291,6 @@ class Device:
)
img = cv2.cvtColor(array, cv2.COLOR_RGBA2RGB)
screencap = img2bytes(img)
save_screenshot(screencap)
stop_time = datetime.now()
config.screenshot_time = stop_time
interval = (stop_time - start_time).total_seconds() * 1000
@ -309,6 +306,7 @@ class Device:
else:
config.screenshot_count += 1
save_screenshot(img)
return img
def current_focus(self) -> str:

View file

@ -7,7 +7,7 @@ import numpy as np
from PIL import Image
from mower.utils import typealias as tp
from mower.utils.log import logger, save_screenshot
from mower.utils.log import logger
from mower.utils.path import get_path
@ -190,11 +190,6 @@ def cropimg(img: tp.Image, scope: tp.Scope) -> tp.Image:
return img[scope2slice(scope)]
def saveimg(img: tp.Image, folder):
del folder # 兼容2024.05旧版接口
save_screenshot(img2bytes(img))
def cmatch(
img1: tp.Image, img2: tp.Image, thresh: int = 10, draw: bool = False
) -> bool:

View file

@ -12,6 +12,7 @@ from threading import Thread
import colorlog
from mower.utils import config
from mower.utils import typealias as tp
from mower.utils.path import get_path
from mower.utils.traceback import log_debug, log_info
@ -112,6 +113,8 @@ def screenshot_cleanup():
def screenshot_worker():
from mower.utils.image import img2bytes
screenshot_cleanup()
while True:
now = datetime.now()
@ -119,13 +122,13 @@ def screenshot_worker():
screenshot_cleanup()
img, filename = screenshot_queue.get()
with screenshot_folder.joinpath(filename).open("wb") as f:
f.write(img)
f.write(img2bytes(img))
Thread(target=screenshot_worker, daemon=True).start()
def save_screenshot(img: bytes) -> None:
def save_screenshot(img: tp.Image) -> None:
filename = f"{time.time_ns()}.jpg"
logger.debug(filename)
screenshot_queue.put((img, filename))

View file

@ -449,14 +449,12 @@ def test_custom_screenshot():
shell=True,
creationflags=subprocess.CREATE_NO_WINDOW if __system__ == "windows" else 0,
)
end = time.time()
elapsed = int((end - start) * 1000)
data = np.frombuffer(data, np.uint8)
data = cv2.imdecode(data, cv2.IMREAD_COLOR)
elapsed = int((time.time() - start) * 1000)
_, data = cv2.imencode(".jpg", data, [int(cv2.IMWRITE_JPEG_QUALITY), 75])
data = base64.b64encode(data)
data = data.decode("ascii")
data = base64.b64encode(data).decode("ascii")
return {"elapsed": elapsed, "screenshot": data}