基于wifi室内定位技术数据连接mysql数据库,pyqt5实现窗口 代码运行后窗口出现但是输入数据预测位置时候报出进程已结束,退出代码为 -1073740791 (0xC0000409)
代码如下
import pymysql
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from PyQt5 import QtWidgets, uic
import sys
连接MySQL数据库
def connect_to_db():
connection = pymysql.connect(host=’localhost’,
user=’GZH’,
password=’gaozihao0219’,
db=’wifi_database’)
return connection
从数据库中获取数据
def get_wifi_data_from_db(connection):
query = “SELECT * FROM wifi_data”
wifi_data = pd.read_sql(query, connection)
return wifi_data
KNN算法进行室内定位
def knn_indoor_localization(wifi_data):
X = wifi_data.drop(‘location’, axis=1)
y = wifi_data[‘location’]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
return knn, X_test, y_test
创建PyQt5 GUI界面
class IndoorLocalizationGUI(QtWidgets.QMainWindow):
def init(self, knn_model, X_test, y_test):
super(IndoorLocalizationGUI, self).init()
uic.loadUi(‘C:\Users\12195\PycharmProjects\pythonProject3\.venv\Scripts\indoor_location.ui’, self)
self.knn_model = knn_model
self.X_test = X_test
self.y_test = y_test
self.predict_button.clicked.connect(self.predict_location)
def predict_location(self):
input_data = np.array([self.signal1.value(), self.signal2.value(), self.signal3.value(), self.signal4.value()])
input_data = input_data.reshape(1, -1)
input_data = StandardScaler().fit_transform(input_data)
prediction = self.knn_model.predict(input_data)
self.result_label.setText(f"Predicted location: {prediction[0]}")
运行程序
if name == ‘main‘:
connection = connect_to_db()
wifi_data = get_wifi_data_from_db(connection)
knn_model, X_test, y_test = knn_indoor_localization(wifi_data)
app = QtWidgets.QApplication(sys.argv)
window = IndoorLocalizationGUI(knn_model, X_test, y_test)
window.show()
sys.exit(app.exec_())
推荐文章: