Определение состояния вождения с помощью Core Motion Framework — проблемы точности в автомобильной отраслиIOS

Программируем под IOS
Ответить
Anonymous
 Определение состояния вождения с помощью Core Motion Framework — проблемы точности в автомобильной отрасли

Сообщение Anonymous »

Я работаю над приложением для iOS, в котором мне нужно определять, когда пользователь начинает и прекращает движение, с помощью платформы Apple Core Motion. Я реализовал следующий класс MotionActivityManager для обработки обновлений активности и отображения обнаруженных состояний в представлении SwiftUI.
Хотя я могу точно определять состояния «Стационарное» и «Ходьба», обнаруживая « Состояние «Вождение» (автомобильное) было ненадежным. Точность часто терпит неудачу, и платформа часто ошибочно классифицирует вождение как другие состояния, такие как «Неизвестно» или «Ходьба».
Вот реализация:

Код: Выделить всё

import SwiftUI
import CoreMotion

class MotionActivityManager: ObservableObject {
private let motionActivityManager = CMMotionActivityManager()
private let dateFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
return formatter
}()

@Published var motionStates: [MotionState] = []
@Published var startDate: String = ""
@Published var confidence: String = ""

init() {
setupDefaultStates()
startActivityUpdates()
}

private func setupDefaultStates() {
motionStates = [
MotionState(label: "Stationary", value: false),
MotionState(label: "Walking", value: false),
MotionState(label: "Running", value: false),
MotionState(label: "Automotive", value: false),
MotionState(label: "Cycling", value: false),
MotionState(label: "Unknown", value: false)
]
}

func startActivityUpdates() {
guard CMMotionActivityManager.isActivityAvailable() else {
print("Motion activity is not available.")
return
}

motionActivityManager.startActivityUpdates(to: .main) { [weak self] motion in
guard let self = self, let motion = motion else { return }
DispatchQueue.main.async {
self.updateProperties(with: motion)
}
}
}

private func updateProperties(with motion: CMMotionActivity) {
motionStates = [
MotionState(label: "Stationary", value: motion.stationary),
MotionState(label: "Walking", value: motion.walking),
MotionState(label: "Running", value: motion.running),
MotionState(label: "Automotive", value: motion.automotive),
MotionState(label: "Cycling", value: motion.cycling),
MotionState(label: "Unknown", value: motion.unknown)
]
startDate = dateFormatter.string(from: motion.startDate)

switch motion.confidence {
case .low:
confidence = "Low"
case .medium:
confidence = "Medium"
case .high:
confidence = "High"
@unknown default:
confidence = "Unknown"
}
}
}

struct MotionState: Identifiable {
let id = UUID()
let label: String
let value: Bool
}

struct ContentView: View {
@StateObject private var motionManager = MotionActivityManager()

var body: some View {
ScrollView {
VStack(spacing: 16) {
ForEach(motionManager.motionStates) { state in
LabelView(label: state.label, value: state.value ? "True" : "False")
}
LabelView(label: "Confidence", value: motionManager.confidence)
}
.padding()
}
.onAppear {
UIApplication.shared.isIdleTimerDisabled = true
motionManager.startActivityUpdates()
}
.navigationTitle("Motion Activity")
}
}
Проблемы:
Состояние motion.automotive часто не определяется точно.
Уровень достоверности остается низким для автомобильного состояния, даже когда устройство явно находится в автомобиле.
Как я могу повысить точность определения состояния «Вождение» с помощью платформы Core Motion?

Подробнее здесь: https://stackoverflow.com/questions/793 ... acy-issues
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»