2016-04-14 22 views
5

Tôi đang cố gắng sử dụng tính năng nhận dạng hoạt động trong một dự án để phát hiện khi nào người dùng là "TRONG XE" (Lái xe) Vấn đề là hầu như không thể sử dụng nó, vì hầu hếtProbableActivity thường báo cáo "IN-VEHICLE" mặc dù tôi đã ngồi ở bàn làm việc của tôi trong một thời gian dài hoặc chỉ đi dạo quanh nhà tôi. Sẽ rất tuyệt khi biết cách API kết luận điều này.API nhận dạng hoạt động không đáng tin cậy?

Tôi nghĩ tính năng này có tiềm năng lớn, nhưng hiện tại có điều gì đó rõ ràng là không hoạt động.

Đây là nhật ký của MostProbableActivity được thực hiện sau mỗi 30 giây để hiển thị ý tôi. Ngồi ở bàn làm việc của tôi, sau 4 phút tôi bật điện thoại một vài lần, và kết quả này là kết quả "có thể xảy ra nhất trong XE".

Tôi đã thử các điện thoại khác nhau và kết quả giống nhau. Vì vậy, tôi không nghĩ rằng nó liên quan đến phần cứng.

DetectedActivity [type=STILL, confidence=43] 
DetectedActivity [type=STILL, confidence=54] 
DetectedActivity [type=STILL, confidence=100] 
DetectedActivity [type=STILL, confidence=100] 
DetectedActivity [type=STILL, confidence=69] 
DetectedActivity [type=STILL, confidence=100] 
DetectedActivity [type=STILL, confidence=92] 
DetectedActivity [type=TILTING, confidence=100] 
DetectedActivity [type=IN_VEHICLE, confidence=49] 
DetectedActivity [type=TILTING, confidence=100] 
DetectedActivity [type=STILL, confidence=51] 
DetectedActivity [type=STILL, confidence=100] 
DetectedActivity [type=STILL, confidence=100] 
DetectedActivity [type=STILL, confidence=85] 
DetectedActivity [type=STILL, confidence=100] 
DetectedActivity [type=STILL, confidence=66] 
DetectedActivity [type=STILL, confidence=100] 

Đây là mã, không có gì đặc biệt có:

public class ActivitiesIntentService extends IntentService { 


    private static final String TAG = "ActivitiesIntentService"; 


    public ActivitiesIntentService() { 
     super(TAG); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent); 
     Intent i = new Intent(Constants.STRING_ACTION); 


     DetectedActivity mostProbableActivity = result.getMostProbableActivity(); 


     i.putExtra("MOST_PROBABLE_ACTIVITY",mostProbableActivity); 



     LocalBroadcastManager.getInstance(this).sendBroadcast(i); 


     Log.e(TAG, String.valueOf(mostProbableActivity)); 
     } 

} 

Từ liên kết này:

Activity Recognition API

tôi có thể thấy rằng những người khác có kinh nghiệm tương tự, nhưng một số tuyên bố rằng nó hoạt động OK.

Tôi nghĩ đây là lỗi trong thuật toán tự tin của API. Nó sẽ dễ dàng kết luận rằng điện thoại không di chuyển theo bất kỳ hướng nào, cũng không phải trên một con đường vì vậy rõ ràng là KHÔNG "khó khăn nhất" trong một chiếc XE.

Có ai có thể xác nhận vấn đề này hoặc tôi sử dụng sai cách không?

Trân trọng

Thomas

+0

Bạn đang sử dụng đúng cách. Vấn đề là nếu không lấy mẫu gps và tháo pin thì sẽ rất khó phát hiện hoạt động lái xe. Google có thể theo dõi các dữ liệu cảm biến (gia tốc kế, con quay hồi chuyển, từ kế, vv ..) trong một vài giai đoạn và tìm kiếm một mô hình lái xe (rất giống với vẫn còn nhưng có rung động độc đáo). Đôi khi thuật toán không đủ chính xác. – MikeL

Trả lời

3

Gấu nhớ rằng đây là một dịch vụ tiêu thụ năng lượng thấp rất, vì vậy nó không thể nhìn vào thiết bị cảm biến liên tục. Điều đó sẽ tiêu hao pin quá nhanh để có ích. Hãy chắc chắn để read the docs để hiểu những hạn chế.

Nếu bạn muốn đọc chính xác hơn, hãy tăng khoảng thời gian phát hiện của bạn. Điều đó sẽ cung cấp cho nó nhiều dữ liệu hơn để làm việc.

Cũng lưu ý rằng các phép đo này phải được thực hiện rộng rãi. Trường hợp sử dụng có thể là ước tính thời gian mà nhà cung cấp dịch vụ đã tham gia vào hoạt động thể chất hoặc kích hoạt và hủy kích hoạt các thành phần của một ứng dụng sẽ chạy khi nhà cung cấp dịch vụ đang thực hiện một trong các hoạt động được phát hiện.

1

Nếu bạn cần đọc chính xác hơn, bạn nên tăng mức phát hiện của thiết bị, nhưng điều này, đến lượt nó, cuối cùng sẽ tiêu hao pin của bạn. Theo như phản hồi của kết quả của bạn, để đảm bảo rằng người dùng của bạn đang thực hiện một hoạt động nhất định, sự tự tin của dịch vụ Google Play phải> 75 hoặc sẽ an toàn để giả định rằng người dùng của bạn không thực hiện. Trong trường hợp của bạn, sự tự tin của dịch vụ Google Play là 49, có nghĩa là nó không chắc liệu người dùng của bạn có đang lái xe hay không. Bạn cũng có thể thử sử dụng một đơn giản 'lệnh if'

if(DetectedActivity == “In_Vehicle” && result.getConfidence()> 75) 
{ 
// output = User is Driving; 
// Perform task 
} 

Các cách khác để có được những hiểu biết chính xác hơn về các hoạt động và địa điểm của người dùng mà không cần pin của bạn để ráo nước, là để thử một số của API như tranql, Bối cảnh Hub hoặc Neura

+2

Làm thế nào bạn đạt được kết luận rằng 75% là một con số tốt? Có một số tham chiếu để hỗ trợ đề xuất của bạn? – Pranaysharma

+0

@Pranaysharma câu hỏi hay. Tôi tìm thấy một hướng dẫn đề cập đến điều này 75% nhưng tôi không làm thế nào họ chọn số đó: https://code.tutsplus.com/tutorials/how-to-recognize-user-activity-with-activity-recognition--cms-25851 – nbeuchat

+0

75% được đề cập trong video xuất hiện trên trang google này https://developers.google.com/location-context/activity-recognition/ –

Các vấn đề liên quan