diff --git a/docs/Design/SoftArchitecture/MG.pdf b/docs/Design/SoftArchitecture/MG.pdf index af24cd8..02e6441 100644 Binary files a/docs/Design/SoftArchitecture/MG.pdf and b/docs/Design/SoftArchitecture/MG.pdf differ diff --git a/docs/Design/SoftArchitecture/MG.tex b/docs/Design/SoftArchitecture/MG.tex index 633c6ff..2970cfc 100644 --- a/docs/Design/SoftArchitecture/MG.tex +++ b/docs/Design/SoftArchitecture/MG.tex @@ -9,6 +9,8 @@ \usepackage{graphicx} \usepackage{float} \usepackage{hyperref} +\usepackage{ulem} +\newcommand{\rt}[1]{\textcolor{red}{#1}} \hypersetup{ colorlinks, citecolor=blue, @@ -50,6 +52,7 @@ \section{Revision History} Jan 13, 2024 & 1.0 & Initial Draft\\ Jan 14 2024 & 1.1 & Revisit after MIS module decomposition\\ Jan 17 2024 & 1.2 & Add abbreviations section\\ +Mar 27 2024 & 1.3 & Rev1\\ \bottomrule \end{tabularx} @@ -115,15 +118,30 @@ \section{Introduction} \subsection{Overview} This Module Guide Document serves as a design blueprint for MotionMingle - a WebRTC-based video conferencing application designed to enrich the experience of Tai Chi instruction. It presents a modular perspective of the project, guiding the development team in creating a platform that emphasizes real-time interaction, minimal hardware requirements, and ease of use. -The document aligns with standards outlined in various project documents, including the SRS, HA, VnVPlan, SystDes, and MIS. \\ +\sout{The document aligns with standards outlined in various project documents, including the SRS, HA, VnVPlan, SystDes, and MIS.} -SRS - /docs/SRS/SRS.pdf \\ +\sout{SRS - /docs/SRS/SRS.pdf} -HA - /docs/HazardAnalysis/HazardAnalysis.pdf \\ +\sout{HA - /docs/HazardAnalysis/HazardAnalysis.pdf} -VnVPlan - /docs/VnVPlan/VnVPlan.pdf \\ +\sout{VnVPlan - /docs/VnVPlan/VnVPlan.pdf} + +\sout{MIS - /docs/Design/SoftDetailedDes/MIS.pdf} + +\rt{Relevant documentation include:} +\begin{description} +\item[\href{https://github.com/InfiniView-AI/MotionMingle/blob/main/docs/SRS/SRS.pdf}{\rt{SRS}}] + \rt{The SRS document is a related document as most of the requirements specified + in this document come from the SRS document.} +\item[\href{https://github.com/InfiniView-AI/MotionMingle/blob/main/docs/HazardAnalysis/HazardAnalysis.pdf}{\rt{Hazard Analysis}}] + \rt{The Hazard Analysis document is a related document as some of the requirements + come from the Hazard Analysis document.} +\item[\href{https://github.com/InfiniView-AI/MotionMingle/blob/main/docs/VnVPlan/VnVPlan.pdf}{\rt{VnVPlan}}] + \rt{The VnVPlan is essential as it outlines the approach for ensuring that the modules meet their specified requirements and work as intended.} +\item[\href{https://github.com/InfiniView-AI/MotionMingle/blob/main/docs/Design/SoftDetailedDes/MIS.pdf}{\rt{Module Interface Specification}}] + \rt{The Module Interface Specification is pivotal for detailing the interactions between various system components, ensuring compatibility and defining the communication protocols necessary for module integration.} +\end{description} -MIS - /docs/Design/SoftDetailedDes/MIS.pdf \\ \subsection{Purpose} The aim of this Module Guide Document is to detail the architecture of modules, based on selected design principles and patterns, to clarify the project’s functionalities and the specific roles of each module. @@ -149,8 +167,10 @@ \subsection{Anticipated Changes} \label{SecAchange} adopted here is called design for change. \begin{description} -\item[\refstepcounter{acnum} \actheacnum :] Video stream sharing by practitioners might be allowed for better user communications. -\item[\refstepcounter{acnum} \actheacnum :] Audio stream sharing by practitioners might be allowed for better user communications. +\item[\refstepcounter{acnum} \actheacnum :] \sout{Video stream sharing by practitioners might be allowed for better user communications.}\\ +\rt{The application shall enable the streaming of video content from any practitioners, ensuring clear visual communication for instructional purposes.} +\item[\refstepcounter{acnum} \actheacnum :] \sout{Audio stream sharing by practitioners might be allowed for better user communications.}\\ +\rt{The application shall support audio streaming capabilities for practitioners to facilitate auditory communication.} \item[\refstepcounter{acnum} \actheacnum :] The number of annotation types available for users to choose from might change as discovered through the development process. \item[\refstepcounter{acnum} \actheacnum :] The initial release of the application has a limited load capacity, which will need to be expanded as the application's popularity grows to accommodate a growing number of users. @@ -192,13 +212,15 @@ \subsection{Unlikely Changes} \label{SecUchange} \item[\refstepcounter{ucnum} \uctheucnum:] The fundamental feature of adding annotations to the video stream is not expected to change. -\item[\refstepcounter{ucnum} \uctheucnum:] The application's design, ensuring compliance with relevant laws, is foreseen to remain unaltered. +\item[\refstepcounter{ucnum} \uctheucnum:] \sout{The application's design, ensuring compliance with relevant laws, is foreseen to remain unaltered.}\\ + \rt{The application’s design will include a strategy for regular legal reviews and updates, ensuring ongoing compliance with relevant laws. This shall enable the application to adapt to and incorporate changes in legal requirements as they arise.} -\item[\refstepcounter{ucnum} \uctheucnum:] The client for this project is not expected to change, as it is designed as a student capstone project with limited market potential. +\item[\refstepcounter{ucnum} \uctheucnum:] \sout{The client for this project is not expected to change, as it is designed as a student capstone project with limited market potential.}\\ + \rt{The application shall be developed with a flexible architecture to accommodate potential future shifts in the client's requirements or market needs, ensuring the product remains viable and adaptable for broader deployment beyond the scope of the initial capstone project.} \item[\refstepcounter{ucnum} \uctheucnum:] The stakeholder for this project is unlikely to change, as it is a student capstone project adhering to specific course guidelines. -\item[\refstepcounter{ucnum} \uctheucnum:] The project's schedule and budget constraints are anticipated to stay fixed, in line with the requirements of the student capstone course. +\item[\refstepcounter{ucnum} \sout{\uctheucnum:}] \sout{The project's schedule and budget constraints are anticipated to stay fixed, in line with the requirements of the student capstone course.} \end{description} \section{Module Hierarchy} \label{SecMH} @@ -583,10 +605,10 @@ \section{Use Hierarchy Between Modules} \label{SecUse} \label{FigUH} \end{figure} -\section{Timeine} +\section{\rt{Timeline}} \begin{itemize} - \item \textbf{Week 1 - 2:} + \item \textbf{Week 1 - 2:} \rt{Dec 1 - Dec 14, 2023} \begin{itemize} \item M2: User Authentication Module \begin{itemize} @@ -599,7 +621,7 @@ \section{Timeine} \item Define interfaces for other modules (Kehao) \end{itemize} \end{itemize} - \item \textbf{Week 3 - 4:} + \item \textbf{Week 3 - 4:} \rt{Dec 15 - Dec 30, 2023} \begin{itemize} \item M13: SFU Server Module \begin{itemize} @@ -612,7 +634,7 @@ \section{Timeine} \item Implementation (Kehao, Qianlin) \end{itemize} \end{itemize} - \item \textbf{Week 5:} + \item \textbf{Week 5:} \rt{Jan 1 - Jan 7, 2024} \begin{itemize} \item M10: Video Transform Module \begin{itemize} @@ -620,7 +642,7 @@ \section{Timeine} \item Initial implementation (Qianlin, Xunzhou, Anhao) \end{itemize} \end{itemize} - \item \textbf{Week 6 - 7:} + \item \textbf{Week 6 - 7:} \rt{Jan 8 - Jan 21, 2024} \begin{itemize} \item M3: Instructor View Module \begin{itemize} @@ -633,7 +655,7 @@ \section{Timeine} \item Backend integration (Qianlin, Xunzhou, Anhao) \end{itemize} \end{itemize} - \item \textbf{Week 8 - 9:} + \item \textbf{Week 8 - 9:} \rt{Jan 24 - Feb 7, 2024} \begin{itemize} \item M7: RTC Control Module \begin{itemize} @@ -646,7 +668,7 @@ \section{Timeine} \item Integration with Video Transform Module (Xunzhou, Anhao) \end{itemize} \end{itemize} - \item \textbf{Week 10 - 11:} + \item \textbf{Week 10 - 11:} \rt{Feb 14 - Feb 28, 2024} \begin{itemize} \item M11: Human Pose Estimation Annotation Module \begin{itemize} @@ -659,7 +681,7 @@ \section{Timeine} \item Integration with Human Pose Estimation (Qianlin, Xunzhou) \end{itemize} \end{itemize} - \item \textbf{Week 12 - 13:} + \item \textbf{Week 12 - 13:} \rt{Mar 1 - Mar 15, 2024} \begin{itemize} \item M5: Annotation Configuration Module \begin{itemize} diff --git a/docs/Design/SoftDetailedDes/MIS.pdf b/docs/Design/SoftDetailedDes/MIS.pdf index a45e176..b5a2176 100644 Binary files a/docs/Design/SoftDetailedDes/MIS.pdf and b/docs/Design/SoftDetailedDes/MIS.pdf differ diff --git a/docs/Design/SoftDetailedDes/MIS.tex b/docs/Design/SoftDetailedDes/MIS.tex index 3a51f61..7510937 100644 --- a/docs/Design/SoftDetailedDes/MIS.tex +++ b/docs/Design/SoftDetailedDes/MIS.tex @@ -19,6 +19,8 @@ \usepackage[section]{placeins} \usepackage{caption} \usepackage{fullpage} +\usepackage{ulem} +\newcommand{\rt}[1]{\textcolor{red}{#1}} \hypersetup{ bookmarks=true, % show bookmarks bar? @@ -58,6 +60,7 @@ \section{Revision History} Jan 13 & Add MIS for Media Control components, RTC Control components \\ Jan 14 & Add MIS for Backend components \\ Jan 17 & Revise before submission \\ + Mar 27 & Rev1 \\ \bottomrule \end{tabularx} @@ -260,7 +263,7 @@ \subsubsection{Access Routine Semantics} \item transition: N/A \item output: pc := RTCPeerConnection --- initializes a new RTCPeerConnection based on the given configuration. -\item exception: N/A +\item exception: \sout{N/A} \rt{ConfigurationError --- thrown if the configuration is invalid or missing required information.} \end{itemize} @@ -269,7 +272,7 @@ \subsubsection{Access Routine Semantics} \item transition: pc.signalingState := closed --- closes peer connection and send a signal to the connected peer connection. \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{InvalidStateError --- thrown if the connection is already closed or not in a valid state to be closed.} \end{itemize} @@ -285,7 +288,7 @@ \subsubsection{Access Routine Semantics} set the remote description of the peer connection to its received SDP from SFU\_BROADCAST\_API. \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{NegotiationError --- thrown if the negotiation fails due to invalid SDP or connection state.} \end{itemize} @@ -293,7 +296,7 @@ \subsubsection{Access Routine Semantics} \begin{itemize} \item transition: pc.event := getRemoteEvent(pc).streams \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{StreamNotFoundError --- thrown if the remote stream cannot be found or is not accessible.} \end{itemize} \subsubsection{Local Functions} @@ -302,7 +305,7 @@ \subsubsection{Local Functions} \begin{itemize} \item transition: N/A \item output: pc.event := RTCTrackEvent -\item exception: N/A +\item exception: \sout{N/A} \rt{EventNotFoundError --- thrown if the event related to the remote track is not found or is not triggered.} \end{itemize} \section{MIS of Media Control Module} \label{sec:mediactrl} @@ -416,23 +419,22 @@ \subsubsection{Access Routine Semantics} \begin{itemize} \item transition: isMicEnabled := isEnabled \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{DeviceAccessError --- thrown if the microphone cannot be accessed or permissions are not granted.} \end{itemize} \noindent setCameraEnabled(isEnabled: Boolean): \begin{itemize} \item transition: isCameraEnabled := isEnabled \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{DeviceAccessError --- thrown if the microphone cannot be accessed or permissions are not granted.} \end{itemize} - \noindent getStream(): \begin{itemize} \item transition: N/A \item output: returns the user media stream based on the state value isCameraEnabled and isMicEnabled -\item exception: N/A +\item exception: \sout{N/A} \rt{DeviceAccessError --- thrown if the microphone cannot be accessed or permissions are not granted.} \end{itemize} \subsubsection{Local Functions} @@ -500,7 +502,7 @@ \subsubsection{Access Routine Semantics} \begin{itemize} \item transition: N/A \item output: renders a react component of the instructor view page -\item exception: N/A +\item exception: \sout{N/A} \rt{RenderError --- thrown if the component fails to render.} \end{itemize} \subsubsection{Local Functions} @@ -509,7 +511,7 @@ \subsubsection{Local Functions} \begin{itemize} \item transition: peerConnection := pc \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{ConnectionError --- thrown if the peer connection cannot be established.} \end{itemize} \noindent getSelfVideo(): @@ -520,14 +522,14 @@ \subsubsection{Local Functions} render video stream from the local camera to screen \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{VideoStreamError --- thrown if the local video stream cannot be accessed or is not available.} \end{itemize} \noindent startRemoteSharing(): \begin{itemize} \item transition: peerConnection.addTrack := MediaControl.getStream() \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{ShareStartError --- thrown if the stream cannot be added to the peer connection or sharing cannot be initiated.} \end{itemize} \noindent stopRemoteSharing(): @@ -540,7 +542,7 @@ \subsubsection{Local Functions} stops the remote video on the user’s screen and close the RTCPeerConnection \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{ShareStopError --- thrown if stopping the remote sharing fails or the connection cannot be closed.} \end{itemize} \noindent getRemoteVideo(): @@ -548,7 +550,7 @@ \subsubsection{Local Functions} \item transition: get remote video coming from the SFU server and render it on the user's screen. \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{RemoteVideoError --- thrown if the remote video cannot be retrieved or displayed.} \end{itemize} @@ -614,7 +616,7 @@ \subsubsection{Local Functions} \begin{itemize} \item transition: peerConnection := pc \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{ConnectionSetupFailure --- thrown if the peer connection cannot be set due to an invalid or null `pc` argument, or if the connection setup fails.} \end{itemize} \noindent getRemoteVideo(): @@ -622,7 +624,7 @@ \subsubsection{Local Functions} \item transition: get remote video coming from the SFU server and render it on the user's screen. \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{VideoRetrievalError --- thrown if the remote video cannot be retrieved from the SFU server, or if there is an error in rendering the video on the screen.} \end{itemize} @@ -681,28 +683,28 @@ \subsubsection{Access Routine Semantics} \begin{itemize} \item transition: isSkeletonEnabled := isEnabled \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{FeatureToggleError --- thrown if there is an error in toggling the skeleton visualization state.} \end{itemize} \noindent setIsCOMEnabled(isEnabled: Boolean): \begin{itemize} \item transition: isCOMEnabled := isEnabled \item output: N/A -\item exception: N/A +\item exception: \sout{N/A} \rt{FeatureToggleError --- thrown if there is an error in toggling the COM visualization state.} \end{itemize} \noindent getIsSkeletonEnabled(): \begin{itemize} \item transition: N/A \item output: isSkeletonEnabled -\item exception: N/A +\item exception: \sout{N/A} \rt{StateRetrievalError --- thrown if the current state of the skeleton feature cannot be retrieved.} \end{itemize} \noindent getIsCOMEnabled(): \begin{itemize} \item transition: N/A \item output: isCOMEnabled -\item exception: N/A +\item exception: \sout{N/A} \rt{StateRetrievalError --- thrown if the current state of the COM feature cannot be retrieved.} \end{itemize} @@ -881,7 +883,7 @@ \subsubsection{Access Routine Semantics} \begin{itemize} \item transition: initiated by track and transform, self.track = track, self.transform = transform \item output: out := self - \item exception: N/A + \item exception: \sout{N/A} \rt{TransformationError --- thrown if the transform type is unrecognized or if the transformation process fails.} \end{itemize} \noindent recv(self): @@ -899,7 +901,7 @@ \subsubsection{Access Routine Semantics} \item output: Returns a new VideoFrame object (new\_frame) that has undergone the specified transformation, preserving the original frames timing information (timestamps and time base). - \item exception: N/A + \item exception: \sout{N/A} \rt{InvalidFrameError --- thrown if the frame is null or corrupted; TransformNotAppliedError --- thrown if the transformation cannot be applied.} \end{itemize} \subsubsection{Local Functions} @@ -961,7 +963,7 @@ \subsubsection{Access Routine Semantics} \end{itemize} \item output: Returns a web response in JSON format. This response contains the SDP data and the type of the local description set on the peer connection. -\item exception: N/A +\item exception: \sout{N/A} \rt{ConnectionSetupError --- thrown if the RTCPeerConnection cannot be established; OfferProcessingError --- thrown if the offer cannot be processed or if setting the local/remote description fails.} \end{itemize} \noindent broadcast(request): @@ -987,7 +989,7 @@ \subsubsection{Access Routine Semantics} \end{itemize} \item output: Returns a web response in JSON format, containing the SDP data and the type of the local description set on the peer connection. -\item exception: N/A +\item exception: \sout{N/A} \rt{ConnectionSetupError --- thrown if the RTCPeerConnection cannot be established; OfferProcessingError --- thrown if the offer cannot be processed or if setting the local/remote description fails.} \end{itemize} \subsubsection{Local Functions} @@ -1048,7 +1050,7 @@ \subsubsection{Access Routine Semantics} returns them ordered by length. \item output: Returns a tuple with the first element being the keypoints set with the longer spine. -\item exception: N/A +\item exception: \sout{N/A} \rt{KeyPointError --- thrown if keypoints are invalid or insufficient to compute the spine length.} \end{itemize} \noindent matchKpts(mirror\_img): @@ -1056,7 +1058,7 @@ \subsubsection{Access Routine Semantics} \item transition: Reflects the keypoints from the mirror image to match the real image. \item output: Returns the adjusted keypoints for the mirrored image. -\item exception: N/A +\item exception: \sout{N/A} \rt{ReflectionError --- thrown if keypoints cannot be reflected properly due to incorrect format or data corruption.} \end{itemize} \noindent get3D(real\_kpts, mirror\_kpts): @@ -1064,7 +1066,7 @@ \subsubsection{Access Routine Semantics} \item transition: Uses the keypoints from the real and mirror images to triangulate 3D points. \item output: Returns the 3D coordinates of the keypoints. -\item exception: N/A +\item exception: \sout{N/A} \rt{TriangulationError --- thrown if 3D triangulation cannot be performed due to invalid or mismatched keypoints.} \end{itemize} \subsubsection{Local Functions} @@ -1123,7 +1125,7 @@ \subsubsection{Access Routine Semantics} \item transition: Calculates the center of mass based on the 3D points of body joints. \item output: Returns the 3D coordinates of the bodys center of mass. -\item exception: N/A +\item exception: \sout{N/A} \rt{CalculationError --- thrown if the center of mass cannot be calculated, possibly due to invalid or insufficient 3D points.} \end{itemize} \noindent feetStates(CoM, points\_3D): @@ -1134,7 +1136,7 @@ \subsubsection{Access Routine Semantics} \item output: Returns a tuple containing two dictionaries, left\_foot and right\_foot, each indicating whether the respective foot is on the ground and whether it is supporting body weight. -\item exception: N/A +\item exception: \sout{N/A} \rt{StateDeterminationError --- thrown if the states of the feet cannot be determined, perhaps due to invalid center of mass or 3D points data.} \end{itemize} \subsubsection{Local Functions} diff --git a/docs/Presentations/EXPO/4G06 Expo Poster.pdf b/docs/Presentations/EXPO/4G06 Expo Poster.pdf new file mode 100644 index 0000000..a65b033 Binary files /dev/null and b/docs/Presentations/EXPO/4G06 Expo Poster.pdf differ